perm filename MSG.SAV[PAT,LMM] blob sn#070837 filedate 1973-11-10 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00145 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00013 00002	UNSORTED MESSAGE.COPY:
C00022 00003	RE: PATTERN MATCH DATE ~MAY
C00029 00004	PATTERN PROBLEMS:
C00030 00005	From: MASINTER Re:   RECORDS
C00033 00006	From: CARHART       Re:   CYCGEN (?)BUGS(?)
C00038 00007	FROM TEITELMAN RE: IN VALID
C00039 00008	Date: 2-SEP-73  From: TEITELMAN Re: Various
C00041 00009	Date: 2-SEP-73  From: TEITELMAN
C00046 00010	Date: 2-SEP-73  From: TEITELMAN 
C00047 00011	Date: 2-SEP-73  From: TEITELMAN 
C00049 00012	Date: 2-SEP-73  From: TEITELMAN  Re: SURRENDER
C00050 00013	Date: 2-SEP-73  From: TEITELMAN  Re: I.S.OPR
C00052 00014	Date:  4-SEP-73  404 From: TEITELMAN
C00053 00015	Date:  5-SEP-73 1950-PDT From: SRIDHARAN Re:   LABELLING PAPER
C00054 00016	Date:  5-SEP-73 1955-PDT  From: SRIDHARAN  Re:   NEW FILES
C00056 00017	Date: 30-AUG-73 2354 From: TEITELMAN Re:   MEMO
C00059 00018	From: BRYANT at BBN-TENEX
C00061 00019	Date: 4-SEP-73 2015 From: TEITELMAN Re: SYSTEM DATE cc: LISP USERS
C00062 00020	Date:  4-SEP-73 2016 From: TEITELMAN cc:   LAMPSON
C00063 00021	Date:  5-SEP-73 1147 From: TEITELMAN Re:NEW LISP,CHANGES IN I.S.cc:   LISP USERS
C00064 00022	Date: 10-SEP-73 2340 From: TEITELMAN
C00065 00023	Date: 11-SEP-73  056  From: TEITELMAN Re:   VARIOUS
C00066 00024	Date: 11-SEP-73  103 From: TEITELMAN
C00069 00025	Date: 11-SEP-73  209 From: TEITELMAN
C00070 00026	Date: 11-SEP-73  251 From: TEITELMAN
C00071 00027	Date: 11-SEP-73  308 From: TEITELMAN Re:   STRPOSL
C00072 00028	Date: 11-SEP-73  150 From: TEITELMAN 
C00073 00029	Date: 12-SEP-73  354 From: TEITELMAN
C00075 00030	Date: 12-SEP-73  518 From: TEITELMAN
C00076 00031	Date: 12-SEP-73 1719-EDT From: BRYANT at BBN-TENEX Re:SOME NOTES ON <NEWLISP>LISP AT BBN
C00079 00032	Date: 12-SEP-73  518 From: TEITELMAN Re: WORKING MY WAY THRU YOUR VARIOUS GOODIES.
C00080 00033	Date: 13-SEP-73 1609 From: TEITELMAN Re:   PRSTRUC
C00082 00034	Date: 13-SEP-73 1609 From: TEITELMAN
C00083 00035	Date: 13-SEP-73 1652 From: TEITELMAN Re:   FGETD
C00085 00036	Date: 13-SEP-73 1806 From: TEITELMAN Re:   NEW FEATURES IN ITERATIVE STATEMENTS
C00087 00037	FROM MASINTER, RE RECORDS
C00089 00038	Date: 14-SEP-73  453 From: TEITELMAN Re:   NEW LISP
C00091 00039	Date: 14-SEP-73 1545 From: TEITELMAN
C00092 00040	Date: 15-SEP-73 1657 From: TEITELMAN 
C00094 00041	Date: 15-SEP-73 1715 From: TEITELMAN Re:   LOWERCASING
C00095 00042	Date: 15-SEP-73 1729 From: TEITELMAN 
C00096 00043	Date: 15-SEP-73 1734 From: TEITELMAN
C00097 00044	Date: 18-SEP-73  722 From: TEITELMAN
C00098 00045	Date: 18-SEP-73  810 From: TEITELMAN
C00101 00046	Date: 19-SEP-73  215 From: TEITELMAN
C00102 00047	Date: 19-SEP-73  337 From: GUEST Re:   labeller paper
C00103 00048	FROM MASINTER RE: RECORDS:
C00105 00049	Date: 28-SEP-73 2322 From: TEITELMAN Re:   FIRST OF MANY
C00106 00050	Date: 28-SEP-73 2337 From: TEITELMAN Re:   2
C00108 00051	Date: 28-SEP-73 2348 From: TEITELMAN
C00109 00052	Date: 29-SEP-73 1513 From: TEITELMAN
C00112 00053	Date: 29-SEP-73 1533 From: TEITELMAN Re:   MORE
C00117 00054	Date:  1-OCT-73 2018 From: TEITELMAN
C00118 00055	Date:  2-OCT-73  045 From: TEITELMAN
C00119 00056	Date:  2-OCT-73  100 From: TEITELMAN
C00120 00057	Date:  2-OCT-73  114 From: TEITELMAN
C00121 00058	Date:  3-OCT-73 1327 From: TEITELMAN
C00122 00059	Date:  3-OCT-73 1751 From: TEITELMAN Re:   CLISPRECORD
C00126 00060	Date:  3-OCT-73 1813 From: TEITELMAN
C00128 00061	Date:  4-OCT-73 1720 From: TEITELMAN Re:   YOUR MESSAGE
C00129 00062	Date:  4-OCT-73 1758 From: TEITELMAN Re:   VARIOUS RECORD STUFF
C00134 00063	From: MASINTER
C00136 00064	Date:  5-OCT-73 0306-EDT From: TEITELMAN 
C00138 00065	 THE JUSTIFICATION FOR USING THE ACCESSFN INSTEAD OF THE GETHASH
C00140 00066	Date:  5-OCT-73 1233 From: TEITELMAN
C00141 00067	Date:  5-OCT-73 1822 From: JACKSON Re:   CLUMPIFY
C00142 00068	Date:  6-OCT-73 1300 From: TEITELMAN
C00143 00069	Date:  7-OCT-73 1603 From: TEITELMAN
C00146 00070	Date:  7-OCT-73 1616 From: TEITELMAN
C00147 00071	Date:  7-OCT-73 1618 From: TEITELMAN
C00148 00072	Date:  7-OCT-73 1619 From: TEITELMAN
C00149 00073	Date:  7-OCT-73 1619 From: TEITELMAN
C00150 00074	Date:  7-OCT-73 1625 From: TEITELMAN
C00151 00075	Date:  7-OCT-73 1628 From: TEITELMAN
C00152 00076	Date:  7-OCT-73 2255 From: METCALFE Re:   GUEST
C00153 00077	Date:  8-OCT-73 1810 From: TEITELMAN
C00154 00078	Date:  8-OCT-73 1813 From: TEITELMAN
C00155 00079	Date:  9-OCT-73 1350 From: TEITELMAN Re:   ACCESSFN
C00156 00080	Date:  9-OCT-73 1605 From: TEITELMAN
C00157 00081	Date:  9-OCT-73 1611 From: TEITELMAN Re:   CLISPIFYING '
C00158 00082	Date: 10-OCT-73 1006-PDT From: SRIDHARAN at USC-ISI Re:   DATA STRUCTURE
C00159 00083	Date: 10-OCT-73 1450 From: TEITELMAN
C00160 00084	FROM: SRIDHARAN
C00161 00085	Date: 11-OCT-73  240 From: TEITELMAN Re:   CLISPERROR
C00162 00086	Date: 11-OCT-73  300 From: TEITELMAN Re:   BUG IN MATCH
C00163 00087	Date: 11-OCT-73  301 From: TEITELMAN Re: MATCH
C00164 00088	Date: 11-OCT-73  306 From: TEITELMAN Re:   VARIOUS
C00166 00089	Date: 27-OCT-73 1822 From: TEITELMAN
C00167 00090	Date: 28-OCT-73 1258 From: TEITELMAN
C00168 00091	Date: 29-OCT-73 1211 From: TEITELMAN
C00169 00092	Date: 31-OCT-73  258 From: TEITELMAN Re: "NEW FEATURE"
C00171 00093	Date:  1-NOV-73 1315 From: MASINTER Re:   ($@FOO $@FIE $@FUM]
C00172 00094	Date:  3-NOV-73 2036 From: TEITELMAN
C00173 00095	Date:  5-NOV-73 2205 From: TEITELMAN Re:   NEW BRKDWN TYPES
C00174 00096	Date:  6-NOV-73  325 From: TAFT Re:   gripe problem cc:   TAYLOR
C00175 00097	Date:  6-NOV-73  327 From: TAFT Re:   protection of telnet.typescript
C00176 00098	Date:  7-NOV-73  310 From: MASINTER Re:   NOFVRINGS(6 0 2) at P=2
C00177 00099	Date:  7-NOV-73 1325 From: TAFT Re:   gripes
C00178 00100	Date:  8-NOV-73 0316-EST From: LEWIS at BBN-TENEX Re:   PART 2
C00180 00101	Date:  8-NOV-73 0303-EST From: LEWIS at BBN-TENEX
C00182 00102	Date:  8-NOV-73  813 From: TEITELMAN
C00185 00103	Date:  8-NOV-73 2049 From: JACKSON Re:   MATCH BUG?
C00186 00104	Date:  9-NOV-73 1415 From: JACKSON
C00187 00105	WARREN:
C00188 00106	WARREN:
C00189 00107	WARREN:
C00190 00108	WARREN:
C00191 00109	WARREN:
C00192 00110	WARREN:
C00194 00111	WARREN:
C00195 00112	WARREN:
C00196 00113	DWIMIFY((IF A THEN B ELSIEF C THEN D]
C00197 00114	DID I REALLY??! ASK FOR IT?
C00198 00115	WARREN:
C00204 00116	PHIL:
C00205 00117	WARREN:.
C00208 00118	WARREN:
C00209 00119	WARREN:
C00210 00120	SRIDHARAN:
C00211 00121	WARREN:
C00212 00122	WARREN:
C00213 00123	WARREN:
C00214 00124	WARREN:
C00218 00125	WARREN:
C00219 00126	WARREN:
C00220 00127	NO DEF FOR CLISP%  .
C00221 00128	WARREN:
C00222 00129	WARREN:
C00223 00130	WARREN:
C00224 00131	WARREN:
C00225 00132	WARREN:
C00226 00133	ED TAFT:
C00228 00134	WARREN:
C00229 00135	PHIL:
C00230 00136	DENDRALERS:
C00232 00137	WARREN:
C00233 00138	WARREN:
C00234 00139	WARREN:
C00235 00140	WARREN:
C00236 00141	WARREN:
C00239 00142	IT IS NEAT THE WAY THAT
C00240 00143	THIS WAS IN <TEITELMAN>LISPX SO YES, MIGHT HAVE GONE AWAY.
C00243 00144	I DON'T THINK YOU'LL LIKE THIS ONE, BUT I THOUGHT I'D PROPOSE IT
C00245 00145	WHEN A DWIM CORRECTION OR CLISP TRANSLATION IS MADE IN A FUNCTION,
C00247 ENDMK
C⊗;
UNSORTED MESSAGE.COPY:
________________________________________________________________________________
THIS IS A STRANGE ONE:
←DEFINE(((TEST(X)(FOO-FIE ← 'A]
(TEST)
←DWIMIFY(TEST]
FOO-FIE←'A {in TEST} treated as clisp
TEST
←?? -1


3. ←DWIMIFY(TEST)
FOO-FIE←'A {in TEST} treated as clisp
parenthesis error in
(QUOTE ("FOO-FIE←'A % { "in " (PRIN2 TEST T) } " treated" " as clisp"
% 
 (CLISP% (QUOTE "FOO-FIE←'A" % "in " .........


and continues trying to print out a circular list, which contains
CLISP% 's (!!!!!) and QUOTE's with more than one thing in them...


it all happens inside a call to APPLY in PRINTHISTORY1, with the function
CLISP%  ... but it's the DWIMIFY(TEST) message which screws things
(I looked at LISPXHISTORY with CLISPTRANFLAG set to XXXX).

________________________________________________________________________________

(1) IN AN EDITING SESSION, I SAID DW, GOT PROMPTED FOR SOME
SPELLING CORRECTIONS, VIZ

CROPFNS -> CROPFN S ? 

I REPLIED Yes AND THEN REALIZED THAT IT WAS WRONG... WAS SUPPOSED
TO BE CROPFN;  UNDID THE DW, AND THEN TRIED DW AGAIN... HOWEVER, IT
SEEMED TO REMEMBER THE RESPELLS, AND JUST SAID
CROPFNS -> CROPFN S ?

(I.E., THE RESPELLS, IF IT IS GOING TO REMEMBER THEM, SHOULD BE 
UNDOABLE)..

THE OTHER THING IS THAT, AFTER EXITING THE EDITOR, AND REENTERING,
AND TRYING IT AGAIN, AND RESPONDING NO TO
CROPFNS -> CROPFN S ?, IT DIDN'T EVEN TRY
CROPFNS -> CROPFN , EVEN THOUGH CROPFN WAS A LAMBDA VAR, BUT
S WAS NOT BOUND OR A LAMBDA VAR OR ANYTHING...

I.E. THIS MISSING SPACE SPELLING CORRECTION SEEMS TO OVERRIDE THE
NORMAL ONE...
________________________________________________________________________________
CLISPIFY((EVERY X (FUNCTION FOO]

(EVERY X (FOO]

..
________________________________________________________________________________

DWIMIFY((FOR X ON L WHEN (AND (FOO X)(FIE X)) DO (PRINT X]

THE TRANSLATION IS FINE, BUT THE FOR GETS CHANGED TO

(FOR X ON L WHEN (AND (FOO X) (FIE X) (PRINT X)) DO (PRINT X]

(IT TRANSLATES TO A MAP WITH (AND (FOO X)(FIE X)(PRINT X))..
THAT AND CAN'T BE NCONC1'ED, THOUGH.

			LARRY
________________________________________________________________________________
DWIMIFY((FOR X IN L WHEN (EXPR X ) COLLECT X]

TRANSLATION: (MAPC L (FUNCTION (LAMBDA (X)
			(AND (EXPR X)
			     (LIST X]
________________________________________________________________________________
I MADE A TAPE OF THE PAPER TO BRING DOWN TO CAMPUS, BUT HAVE BEEN
HAVING TROUBLE READING IT... BOB ENGLEMORE IS WORKING ON TRYING TO
READ IT; YOU SHOULD ASK HIM IF HE WAS ABLE TO.

I WILL LOOK AT &J525.KERNEL.TECHIQUE.TRY2... AS FOR THE CUTTING
AND PASTING; AS SOON AS YOU HAVE THE SOURCE ON FILE ON WYLBUR,
COULD YOU MAKE THE CHANGES IN THE FILE?   I HOPE TO EVENTUALLY PUB
THE THING; SO TRY AND MAINTAIN PUB FORMAT, PLEASE....
(ANY QUESTIONS ABOUT IT, PLEASE CALL ME)

THANKS.
________________________________________________________________________________
IN THE FILE BRKDWN.COM ON <LISP>, THE DEFINITION OF BRKDWNCONSES
IS INCORRECT;  HOWEVER, IF I SET BRKDWNTYPE TO CONSES, AND THEN
PUTD(BRKDWNCONSES], REMOVING THE OLD DEFINITION, THE NEW DEFINITION
GENERATED IS OK... (ALTHOUGH IT MIGHT NOT REALLY BE BRKDOWNCONSES,
SINCE  BRKDWNTYPE←'CONSES, BREAKDOWN(FOO) PUT A CALL TO BREAK1 (!!!)
IN THE DEFINITION OF FOO, RATHER THAN A CALL TO BRKDWN2.   
________________________________________________________________________________
I LOOKED AT THE BREAKDOWN STUFF, AND WAS NOT ABLE TO REPRODUCE
IT IN A CLEAN SYSTEM; SO I AM NOT SURE WHAT CAUSED IT... WILL BANG
ON IT SOME MORE (AS I AM DOING TIMING/CONSCOUNTING IN THE MATCHER),
AND SEE IF IT CROPS UP AGAIN... UNTIL THEN, IGNORE PREVIOUS MESSAGE...
SORRY.
					LARRY
________________________________________________________________________________

MARK'S PHONE
941-8822

WED .. JONATHAN KING MEETING

MONTERREY.. JAZZ FESTIVAL. 
________________________________________________________________________________
NEW MATCH AND MATCH.COM ON <LISP>. I BELIEVE THAT THIS PACKAGE
IS COMPLETE (WORKS FOR ALL POSSIBLE PATTERNS AS DESCRIBED IN THE
WRITEUP) AND GENERATES REASONABLY EFFICIENT CODE, WITHIN THE 
CONSTRAINT THAT FEW "NEW" FUNCTIONS ARE USED 

NO NEW FEATURES ARE CONTAINED IN IT (I.E. NO ANDS, ORS, OR NOTS, AND
THE FAST $ IS NOT IMPLEMENTED).  


THERE WILL BE A NEWER RELEASE SHORTLY, WHICH WILL CHECK FOR
POSSIBLE (AND CURRENTLY ILLEGAL) CLISP CONSTRUCTIONS WITHIN
THE PATTERN, I.E. (&←<'A 'B> ...).

ALSO, THE FUNCTION MAKEMATCH TAKES A THIRD ARGUMENT, STARREPLACED.
IF THIS IS NON-NIL, THEN A * WITHIN THE PATTERN IS INTERPRETED
TO MEAN "REPLACE THIS WITH STARREPLACED" RATHER THAN "RETURN THIS".
I.E. IF YOU SEE X:('A * --)←FOO, AND CALL MAKEMATCH WITH
X, ('A * --) , AND FOO, THEN (AND (EQ (CAR X) (QUOTE A)) (RPLACA (CDR X)
 FOO)))   WILL BE GENERATED (THE RPLAC IS LOOKED UP, OF COURSE).

			LARRY
________________________________________________________________________________
ED FEIGENBAUM ASKED ME TO GET IN TOUCH WITH YOU WITH REGARD TO
PROBLEMS HE ENCOUNTERED USING RSEXEC.  I HAVE HIS TYPESCRIPT --
LOOKS AS I THE RSEXEC SURVEY GOT BACK "I-O TO UNASSIGNED CHANNEL."
INSTEAD OF THE SURVEY INFO.  THE PROBLEM HASN'T SHOWED UP AGAIN, BUT,
WELL,   I'D BE MORE THAN WILLING TO HELP WHATEVER I CAN..
I TRIED CALLING YOU TODAY, BUT I GUESS IT WAS TO LATE.  YOU CAN
CALL ME AT (415) 321-2300 X 4878, OR SEND ME A MESSAGE AT
MASINTER@ISI

			LARRY MASINTER
RE: PATTERN MATCH DATE ~MAY
1. FUTURE - LOOKUP LAST AND MEMB SO USER CAN MAKE FAST DECLARATION.
6.  LOOK UP RPLACA AND RPLACD SO USER CAN DECLARE FOR FRPLACA AND
/RPLACA, ETC.  IF YOU WANT TO INSTALL LOOKUP NOW, DO 

(CLISPLOOKUP FN-NAME NIL NIL (GETP FN-NAME 'LISPFN)),

OR TO BE MORE EFFICIENT, SINCE MOST FUNCTIONS WONT HAVE THEIR OWN
DECLARATIONS, INCLUDE THE CODE FROM THE FUNCTION CLISPLOOKUP (WHICH
IS CONTAINED IN THE FILE CLISP) INYOUR OWN BLOCK. CLISPLOOKUP0 IS
OUTSIDE OF THE DWIMBLOCK SINCE IT IS ONLY CALLED WHEN A FULL LOOKUP
HAS TO BE DONE.  IN MOST CASES,  THE SIMPLE FUNCTION SHOWN IN
CLISPLOOKUP WILL SUFFICE.


2. USE ASSOC WHERE POSSIBLE, AND LOOK IT UP ALSO SO USER CANUSE
FASSOC.

3. INSTALL A FLAG OR NEW E.P. (ELEMENTARY PATTERN) CORRESPONDING TO
$ THAT DOES NOT CONTINUE SEARCHING ONCE IT SUCCEEDS (FUZZY CONCEPT),
E.G. ($ ('A $2) $) WOULD BE AN ASSOC WITH A CHECK ON THE LENGTH OF
THE EEMENT,  BUT WOULD NOT CONTINUE SEARCHING FOR ANOTHER 'A,
SIMILARLY ($ 'A 'B $) WOULD BE (EQ (CADR (MEMB 'A X) 'B)). I THINK
THE DEFAULT FOR $ SHOULD BE THIS WAY,  AND THAT SOMETHNG LIKE $$
WOULD MEAN SEARCH YOUR ASS OFF.

7. CHANGE THE INITIAL VARIABLE DEFAULT TO = AND POSTPONE-SETQ-FLG TO
NIL,  I.E. DONT POSTPONE.

8. MAKE SURE THAT POSTPONE SETQ FLG REALLY WORKS. FOR EXAMPLE IN THE
PATTERN (A←($ !B←'FOO ($ !==C))), IF POSTPONESETQFLG IS NIL,  THEN
THERE IS NO NEED FOR DUMMY VARIABLES NOR FOR A PROG,  I.E. YOU CAN
USE THE VARIABLES MENTIONED IN THE PATTERN FOR STORING TEMORARY
RESULTS.

9. X:($1 *←!(3 4) 5) CAN YOU IMPROVE THE DIAGNOSTIC SO AS NOT TO BE
SO SCARY? ALSO WHY ARE 3 AND 4 QUOTED AND 5 DEFAUTED (ACTUALLY 3 4
AND 5 SHOULD BE LEFT AAONE SINCE THEY ARE NUMBERS, BUT I PRESUME IF
THEY HAD BEEN LITATOMS THE SAME WOULD HOLD)

10. WHY DOES X:($ !X←(3 4) $) GO TO A PROG, BUT X:($ X←(3 4) $) TO A
SOME?

12. *****WRONG - X:($ !(A B) C D) ALSO X:($ !($1 $2) $3) X:($ !(A B)
C D $)

13. LOOK AT X:($ Z $) WITH DEFAULT FOR ASSIGNMENT. I DONT UNDERSTAND
THE SOME WITH (LAMBDA (X) T)

14. X:($ 'A !* $1) COULD BE BETTER.

15. IN YOUR WRITEUP, DID YOU MEAN THAT !  WORKS ON ALL PATTERNS THAT
APPEAR AS THE LAST ELEMENT, BUT ONLY !* AND !(SUBPATTERN) WORK IN
THE INTERIOR? I THINK THIS IS WHAT YOU MEAN, I.E. != OR !== IS OK AS
THE LAST E.P.  ALTHOUGH YOU SAY ONLY !* AND !(SUBPATTERN) ARE
IMPLEMENTED.

16. I GUESS YOU KNOW THAT ($ X←!(PATTERN) $) DOESNT WORK.

18. ($1 Y←$3 $1) DOESNT WORK. I THINK THIS IS REALLY A CASE OF A
HIDDEN ! IN THE MIDDLE, BUT IT ISNT EXPLAINED IN THE WRITEUP, AND I
EITHER HAVE TO EXPLAIN IT OR ELSE IT HAS TO WORK.

19. ****WRONG ($1 'C Y←$1 $) DOESNT DO CDDR CHECK.

21. ($ ! 'A) SHOULD BE (EQ (CDR (LAST --)) NOT (AND (SETQ --) (EQ
--)) I WOULD LIKE TO SEE YOU TRY HARD TO AVOIDE UNNECESSARY PROGS
AND DUMMY VARIABLES.

23. ALSO INSTALLING AN (AND) AND (OR) + AND | I.E. ONE MIGHT SAY

 =X|=Y , =X(OR)=Y , ¬=X(AND)¬=Y , ETC.

I MENTION THESE BECAUSE IN LOOKING THROUGH MY LISTINGS FOR AN
EXAMPLE TO USE IN MY PAPER, I WAS MOST OFTEN FRUSTRATED BECAUSE WE
DID NOT HAVE ¬, &, OR |.

→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→WHAT DOES THIS MEAN?

4. CHECK AND SEE WHERE EXTRA SPACES MAKE A DIFFERENCE. IN PARTICULAR
($ = = X $) AND ($ == X $) ARE NOT EQUIVALENT. THIS SHOULD BE FIXED.


→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→DONE

5.  DONT QUOTE NUMBERS. EVEN IF DEFAULT IS FOR QUOTE OR ASSIGNMENT,
NUMBERS SHULD ALWAYS GO IN AS JUST NUMBERS.

11. X:($1 !X←$1 $2) DONT NEED THE EXTRA T, ALSO FOR X:($ !X←... $)
IN GENERAL, THERE ARE MAAY CASES WHERE YOU ALREADY KNOW THAT THE
RESULT OF THE SETQ IS NON NIL, SO YOU DONT HAVE TO PUT IN THAT T ATT
THE END.

20. USE NULL FOR NOT IN TRANSLATION WHEN WHAT IS MEAAT IS EQ NIL.
I.E. FOR ALL CASES IN THE CURENT CONFIGURATION..

22. THINK ABOUT INSTALLING A ¬ NOT PATTERN- I.E. TILDE, E.G. ¬=FOO,
¬&@NUMBERP, ETC.

→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→NOT GOING TO DO

17. ($1 'A $ 'B) GOES TO (AND (EQ --) (EQ (CAR (LAST (CDDR X)) 'B) I
THINK ON LAST'S, YOU MIGHT AS WELL JUST SAY (LAST X) AS (LAST (CDDR
X)) - I UNDERSTAND THAT IN THE CASE OF MEMBS IT MAKES A DIFFERENT,
E.G. ($1 'A $ 'B $),  YOU WOULD WANT TO SAY (MEMB 'B (CDDR X)) SINCE
THE FIRST ELEMENT MIGHT BE B.
PATTERN PROBLEMS:
ANOTHER PATTERN PROBLEM IS: THERE ARE
 TOO MANY EXTRA CHECKS WHEN A * IS GIVEN -- ALTHOUGH IT CANMATCHNIL,
 THE CHECK IS IMPLICITELY DONE AT THE END; THUS NO CHECK NEED BE DONE
 INTERNALLY.
   SOLUTION: CHANGED THE (* . &) OR (* . $) TO SOMEHTING ELSE WHICH
 CAN'T MATCH NIL, AND SO THAT THE WM IN (* . &) DOESN'T CALL THE
 LOWER MATCHWM WITH (& ...)
From: MASINTER Re:   RECORDS
- - - -
MAKE THE RPLAC THING DEPEND ON LOCAL DECLARATIO RATHER THAN
DECLARATION AT TIME OF RECORD CALL....

COMPOSE SHUD TAKE NAM←X, DO SPELLING CORRECTION, AND CHECK FOR IRRELAVANT NAMES....

POSSIBLY (RPLACFQ (FIELD X) VAL), (/RPLACFQ (FIELD X) VAL)
         (FRPLACFQ (FIELD X) VAL),,,
WITH (RPLACFQ ...) DEFINED?, DWIMIFIED WITH TRANSLATION HIDDEN?
TO THE APPROPRIATE THING.
(TAKES ANYTHING,NOT JUST FIELD NAMES....)


SUGGESTION... IF X IS A FIELD NAME ALREADY, AND A NEW RECORD IS
DECLARED WITH X DIFFERENT... THEN CHANGE X IN THE OLD RECORD
TO RECNAME.X....   THE TRANSLATION OF VAR:X WILL THEN DO
A LOOKUP ON VAR TO SEE IF IT HAS BEEN DECLARED TO BE OF ONE
OF THE RECORDS.....
-------
From: JACKSON
Re:   RECORDS
- - - -

LARRY,
 
IT LOOKS LIKE YOU DESCRIBE THE SAME KIND OF CAPABILITY FOR HANDLING
AND CREATING DATA TYPES, THOUGH I SHOULD ADMIT THAT I DON'T KNOW
VERY MUCH ABOUT THE SUBJECT..
 
PHIL
From: CARHART       Re:   CYCGEN (?)BUGS(?)
OK, LARRY, WATCH THIS...
@LISP
GOOD MORNING.
←SYSIN(<SRID↑FS$)
(<SRIDHARAN>STRGEN.SYS;33)
←EDITE((0))
EDIT
*(1(STRUCFORM NOFV-RINGS (3 2 0 0 0 2)))
*P
((STRUCFORM NOFV-RINGS &))
*1 DO
LEVEL 0, FORMS:1-11
*PP
  [STRUCFORM LIST (STRUCFORM ATTACHBIVALENTS ((0 . 9)
                              (3 . 1))
                             (STRUCFORM CATALOG
                                        (2 0 0 0 2)))
             (STRUCFORM ATTACHBIVALENTS ((0 . 8)
                         (1 . 1)
                         (2 . 1))
                        (STRUCFORM CATALOG (2 0 0 0 2)))
             (STRUCFORM ATTACHBIVALENTS ((0 . 7)
                         (1 . 3))
                        (STRUCFORM CATALOG (2 0 0 0 2)))
             (STRUCFORM ATTACHBIVS&LOOPS ((1 . 2))
                        (NIL [(((1 . 2)) . 1]
                             NIL
                             [(((NIL . 1)) . 1]
                             NIL NIL)
                        (STRUCFORM CATALOG (3 0 1 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS ((2 . 1))
                        (NIL [(((1 . 2)) . 1]
                             NIL
                             [(((NIL . 1)) . 1]
                             NIL NIL)
                        (STRUCFORM CATALOG (3 0 1 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS ((1 . 1))
                        (NIL [(((2 . 2)) . 1]
                             NIL
                             [(((NIL . 1)) . 1]
                             NIL NIL)
                        (STRUCFORM CATALOG (3 0 1 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS NIL (NIL [(((3 . 2)) . 1]
                                                  NIL
                                                  [(((NIL . 1)) . 1]
                                                  NIL NIL)
                        (STRUCFORM CATALOG (3 0 1 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS ((1 . 1))
                        (NIL [(((1 . 2)) . 2]
                             NIL
                             [(((NIL . 1)) . 2]
                             NIL NIL)
                        (STRUCFORM CATALOG (4 0 2)))
             (STRUCFORM ATTACHBIVS&LOOPS ((1 . 1))
                        (NIL NIL NIL NIL NIL NIL)
                        (STRUCFORM CATALOG (2 0 0 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS NIL
                        (NIL NIL NIL NIL NIL NIL)
                        (STRUCFORM CATALOG (2 0 0 0 1)))
             (STRUCFORM ATTACHBIVS&LOOPS NIL (NIL [(((1 . 2)) . 1]
                                                  NIL
                                                  [(((1 . 1)) . 1]
                                                  NIL NIL)
                        (STRUCFORM CATALOG (3 0 1]
*↑C
@;TWO THINGS.  1)ABOVE, THERE IS A CALL TO ATTBVS&
 LOOPS WITH ALL-NIL ARGS.  I DON'T GET THAT.  2)THERE ARE REFS
@;TO CATALOGS (3 0 1 0 1) AND (2 0 0 0 1), BOTH OF WHICH
@;CONTAIN AN ODD NUMBER OF ODD-VALENT NODES, SO THERE HAS TO BE A FV
@;AROUND SOMEWHERE.
FROM TEITELMAN RE: IN VALID
THE  IN  VALID  TRANSLATING AS IN (VALID X)
WAS A BUG IN THE CODE. IT SHOULD NEVER DO THIS
FOR IN/ON'S, TO'S, FROM'S, OR FOR, BIND, OR AS.
IT DOES MAKE SENSE FOR BY. E,G, FOR X IN Y BY CDDR. 

I WILL PROBABLY IMPLEMENT MOST OF YOUR SUGGESTIONS
IN THE MEMO.

THANX FOR TRACKING DOWN THE COMPILER PROBLEM.

WARREN
Date: 2-SEP-73  From: TEITELMAN Re: Various
1) PRINSTRUCTURE DOES CHECK CLISPHASHARRAY, DO YOU HAVE
ANY EVIDENCE TO THE CONTRARY?

2) NO TO STOP MACRO

3) PLEASE MAKE A VERSION OF THE FILE MBDNOTES IN WALKERS
DIRECOTRY THAT WILL COMPILE CORRECTLY. SAVE THE BUGGY VERSION
IN YOUR DIRECTORY FOR WHEN ALICE FIXES THE COMIPLER (TO CHECK IT OUT)
IF THE FIX REQUIRES CHANGING SOME LABELS OR REARRANGING A LITTLE BIT, DO
IT. TELL WALKER WHAT YOU DID AND MAKE SURE HE INCORPORATES THE CHANGES
BACK INTO HIS FILE.  THIS IS IMPORTANT AS PETER DOESN'T HAVE A VERSION
WHICH WORKS NOW.


3)IN LP (COND (& -- (GO LP)) ...
WOULD YOU HAVE BEEN SATISFIED IF
IT CLISPIFIED TO
LP (WHILE & DO --) -- ...)?

Date: 2-SEP-73  From: TEITELMAN

IN IF STATEMENTS, PRETTYPRINT ONLY PUTS THEM ON THE SAME LINE
IF (1) THE STATEMENTS CONTAIN NO SUBEXPRESSION, I.E. ARE LINEAR AND
   (2) IF IT DOES THINK THEY WILL FIT, I.E. AS SOON AS IT REACHES
       ONE THAT IT THINGS WILL NOT FIT, IT STARTS THE NEW LINE.

FOR EXAMPLE IN
  (IF &
    THEN (FOO A) (FOO1 B C D ) (FOO2 E F G) (FOO3 X Y)
         (FUM (ZIP X)
     	      (ZAP X]

NOTE THAT THE FITTING ALGORITHM MAKES SOME ASSUMPTIONS
ABOUT THE AVERAGE LENGTH OF ATOMS (IT DOESNT BLAST THEM APART)
AND IF YOU HAPPEN TO HAVE A FORM WITH LONG ATOMS IN
NEAR THE RIGHT HAND MARGIN THIS WILL FAIL. 

I CAN
 (A) MAKE THE AVERAGE LENGTH OF ATOMS CURRENTLY SET TO 5 BE A VARIABLE
AVAILABLE TO YOU
 (B) USE A MORE CONSERVATIVE ESTIMATE CLOSE TO THE RIGHT HAND MARGIN
 (C) PUT IN MORE THAN ONE SPACE BETWEEN STATEMENTS ON THE SAME LINE.


I MAY START SOUNDING SURLY SOON.
HERE IS THE SCOOP ON PRETTYPRINT. I SPENT ABOUT HALF AN HOUR
DIGGING INTO IT AND THERE ISN'T MUCH I CAN SEE TO DO
SHORT OF ABANDONING THE DISCIPLINE THAT SAYS
THAT IN CLISP SEGMENTS, I.E. BETWEEN CLISPWORDS,
IF A LIST ITSELF DOES NOT CAOUSE A CARRIAGE RETURN INTERNAL
DO NOT CARRIAGE RTURN AFTER IT.
IN YOUR FIRST CASE, WITH FOO,
SINCE VAR←, <'CDDDR VAR> AND I← ARE ALL ATOMS,
THEY ARE PRINTED ON THE SAME LINE. YOU WOULDNT WANT THEM IN
COLUMNS. AFTER AN ATOM ENDING IN A CLISP OPERATOR,
PRETTYPRINT NEVER SPACES, SO THERE IS NO PLACE IN THAT FUNCTION
THAT IS EFFECTED BY THE DECISION TO TREAT LINEAR LISTS
AS ATOMS. FURTHERMORE, EXPECTING PRETTYPRINT
TO KNOW THAT AFTER VAR>   THE END OF A
"CLUSTER" WAS REACHED, REQUIRES IT TO HAVE ALL THE INFORMATION
THAT DWIMIFY HAS, AND MORE.

IN FIE, THE SITUATION IS A LITTLE MORE SUSCEPTIBLE
TO ANALYSIS, AND MAYBE YOU'LL SUGGEST SOMETHING.
PRETTYPRINT PROCEEDS BY FIRST ASKING WHETHER THE
EACH LIST CAN FIT BEFORE DECIDING WHETHER TO START A
NEW LINE.
IN FIE, THE PROBLEM IS THAT A VERY LONG STRING APPEARS AT THE RIGHT
MARGIN. IF THIS WERE A NORMAL ATOM, NO PROBLEMS
WOULD OCCUR, SINCE THERE IS ROOM FOR SEVEN CHARACTERS.

THE PROBLEM GOES AWAY WHEN I INSTALLED THE SPACE TWO
CHARACTERS BETWEEN LISTS, SINCE THEN THERE IS ONLY ROOM FOR
THREE CHARACTERS, AND THE FITP ALGORITHM DETECTS THIS.
ANYWAY, I GUESS STRINGS OCCUR SUFFICIENTLY RARELY, AND
THEIR STATISTICS ARE SUFFICIENTLY SCREWED UP THAT
THEY DESERVE A MORE ACCURATE ACCOUNTING, SO I MADE FITP
ACTUALLY DO AN NCHARS WHEN IT ENCOUNTERS A STRING, AND
IN THIS CASE, IT WILL PRINT EVERYTHING ON THE SAME LINE
IF IT FITS, AND IN YOUR CASE, PRINT A CARRIAGE RETURN
BEFORE THE (PRINT ...)
BEFORE WE CLOSE THIS SUBJECT, YOUR COMMENT
BREVITY IS NICE, LEGIBILITY IS IMPORTANT, LEADS ME TO BELIEVE
THAT YOU THINK THIS "JUST HAPPENED" I.E. THE PRINTING
OF IFS AND THENS THIS WAY. NOT ONLY DID IT TAKE A FAIR
AMOUNT OF THINKING ABUT AND EXPERIMENTING TO DECIDE WHAT
 LOOKED NICE (PLUS CONSULTING MANY OTHERS ON THEIR OPINION)
BUT AN AWFUL LOT OF HACKING WITH SOME VERRY MESSY CODE.
I HAVE PROBABY SPENT IN THE VICINITY OF 50 HOURS ON
PRETTYPRINT TO MAKE IT WORK ON CLISP  THE WAY
IT DOES. CONSTRUCTIVE SUGGESTIONS ARE WELCOME.


Date: 2-SEP-73  From: TEITELMAN 
REMOVING PARENTHESES IN IF ANTECEDENTS IN PROGS.
FIXED.
ALSO, YOUR VARIOUS EXAMPLES ALSO SUGGESTS
THAT IF THE USER IS EDTING THE EXPRESSION
(ITIMES A B) AND REPLACES A WITH X+Y IT WILL
NOT CLISPIFY CORRECTLY. GUESS I HAVE TO DWIMIFY
WHENEVER I SEE AN ATOM WITH FUNNY CHARS IN IT
WHEN THE EXPRESSION IS TO BE CONVERTED TO INFIX OPERATORS.

(I THOUGHT I WAS DONE LAST NIGHT)

Date: 2-SEP-73  From: TEITELMAN 
DO YOU REALLY THINK THAT PEOPLE WILL WANT
TO SEE (OR WORSE BE ASKED) MESSAGES ABOUT SUCH CORRECTIONS,
E.G. FOR X IN Y BY CDDR DO ... AND HAVE
DWIM SAY CDDR -> (CDDR X)?


I UNDERSTAND AND AGREE WITH THE ESSENCE OF YOUR ARGUMENT
ABOUT TRANSFORMATIONS THAT ARE AFFECTED BY CONTEXT AS
REQUIRING INTERACTIONS, BUT AM NOT SURE WHAT TO DO IN
THIS CASE. I PERSONALLY FROWN VERY STRONGLY ON USING
THE SAME NAME FOR BOTH FUNCTIONS AND VARIABLES, AND
***TAKE NOTE*** THE PROBLEM WILL GET WORSE WHEN
WE START HAVING MORE SOPHISTICATED CORRECTIONS, I.E.
IF ONE IS TRYING TO WRITE A SYSTEM TO DISAMBIGUATE
AND THE USER IS INSERTING A LOT OF AMBIGUITY ....

WOULD YOU AGREE THAT IF THE 'FN' IN QUESTION WERE
LIKE CDR, OR ATOM, OR NUMBERP (AS OPPOSED TO VALID
WHICH YOU DEFINED), THAT THE CORRECTION SHOULD
BE DONE AUTOMATICALLY, AND SHOULD THE USER BE  INFORMED?

CALL ME WHEN U GET A CHANCE AS I  WANT TO DISCUSS
THE CLISPIFY PROBLEM WITH YOU ALSO.

Date: 2-SEP-73  From: TEITELMAN  Re: SURRENDER

OK. I PUT IN THE #$'&$#@*> (THAT'S NOT DLS GARBAGE)
THING FOR MESSAGES ON USE OF FUNCTION NAME
AS A FORM.
Date: 2-SEP-73  From: TEITELMAN  Re: I.S.OPR
I DON'T LIKE THE SYNTAX FOR THEN OR THEREIS. HOWEVER,
I HAVE INSTALLED A FEATURE WHICH LETS YOU DEFINE
NEW I.S.TYPES SUCH AS SUM PRODUCT ETC., OR
EVEN CHANGE COLLECT. THERE IS A FUNCTION CALLED
I.S.OPR WHICH TAKES FOUR ARGUMENTS: NAME,
FORM, INIT, AND VAL.
FORM IS THE THING TO BE DONE EACH TIME. * STANDS
FOR THE ARGUMENT TO THE OPERATOR, AND $$VAL INDICATES
THE VALUE, E.G. FOR
RCOLLECT, FORM WOULD BE (CONS * $$VAL), FOR
COLLECT AS IT NOW STANDS (NCONC1 $$VAL *).
INIT IS OPTIONAL AND IS AN INITIALIZING FORM, E.G.
FOR SUM, INIT WOULD BE 0, FOR PRODUCT IT WOULD BE 1.
VAL IS ALSO OPTIONAL AND SPECIFIES A RETURN VALUE.
IF NIL, (RETURN $$VAL) IS SUPPLIED. HOWEVER,
YOU MIGHT DEFINE COLLECT AS
I.S.OPR(COLLECT (CONS * $$VAL) NIL (DREVERSE $$VAL))

I.S.OPR DOES ALL THE STUFF TO THE PROPERTY LISTS,
AS WELL AS ADDING THINGS TO SPELLING LISTS ETC.
IT ALSO HANDLES THE LOWER CASE VERSION.
IT IS UNDOABLE.
I'M SURE YOU'LL GO BATSHIT.
I'LL LET YOU KNOW AS SOON AS I LOAD UP.
Date:  4-SEP-73  404 From: TEITELMAN
- - - -
THE NEW LISP HAS EVERYTHING FIXED EXCEPT FOR THE
COMPILER BUG, AND PARTIALLY CLISPIFIED EXPRESSIONS
CONTAIING ANGLE BRACKETS (BECAUSE OF JACKSONS CODE).
ALL OF YOUR PROBLEMS AND THE SUGGESTIONS I RESPONDED TO
YOU ABOUT IT ARE IMLEMENTED. CLISPIFY SHOULD WORK
ON ALL PARTIALLY CLISPIFIED EXPRESSIONS.
TRY TO BREAKIT AND LET ME KNOW HOW IT GOES.

WARREN
Date:  5-SEP-73 1950-PDT From: SRIDHARAN Re:   LABELLING PAPER
- - - -
I HEARD FROM DENNIS SMITH THAT YOU WERE STILL WORKING ON THE
LABELLING PAPER.  THE CYCGEN PAPER IS READY AND WE ARE MAKING THE
COPIES NEEDED TO MAIL THEM OUT. COULD YOU GIVE ME A REALISTIC
ESTIMATE OF WHEN YOU EXPECT TO HAVE THE SECOND PAPER DONE?  THANKS
MUCH. PLEASE ENLIGHTEN ME ON WHAT YOUR SCHEDULE IS AND WHAT YOUR
PLANS ARE FOR COMING FEW WEEKS.
Date:  5-SEP-73 1955-PDT  From: SRIDHARAN  Re:   NEW FILES
- - - -
THERE IS A NEW STRGEN.SYS;34 UNDER MY DIRECTORY.
RAY CARHART DISCOVERED A BUG IN THE LABELLER REMPERMS WAS BEING COMPUTED
WRONGLY.  I HAVE TRACED THE PROBLEM TO INCORRECT MAINTENANCE OF 
EDGE ORDERINGS AND NODE ORDERING.  THE ROUTINE CHECK SEEMS TO DEPEND 
CRITICALLY ON THESE ORDERINGS.  I HAVE FIXED TWO FUNCTIONS
LABELM -- WHEREIN I INDUCE A FORCED ORDERING OF THE CTENTRIES
IN ASCENDING ORDER OF NODENUMBERS; AND CLASSIFY3 -- ENSURING THAT THIS 
FUNCTION DOES NOT KILL THE ORDER IN CLASSIFYING.
GENLISP FILE HAS THE FUNCTION DIFF. THERE AGAIN AN XLIST WAS CHANGED
TO LIST.
BYE
Date: 30-AUG-73 2354 From: TEITELMAN Re:   MEMO
I HAVE BEEN PROCESSING YOUR EMO. HERE ARE THE VERDICTS:
(re LISP-MISC.MEMO)
(1) I IMPLEMENTED THE SUBPAIR CHANGE, AND ASSUMING BBN DOESNT
SQUAWK TOO LOUDLY IT WILL GO THROUGH. CHECK IT OUT IN NEXT LOAUP.

(2) NO ON TAILP.  THE VALUE OF
TAILP IS THE TAIL, SO RETURNING T WHEN GIVEN NIL AS ITS FIRST
AAGUMENT IS DANGEROUS, AND MAY INFFACT DISRUPT SOME
PROGRAMS THAT ALREADY UTILIZE THIS FACT AND THUS DONT
DO (AND X (TAALP X Y)) CHECKS. SUGGEST YOU WRITE YOUR
OWN VERSON, CALL IT TAILPRED, AND ALWAYS HAVE IT RETURN
T OR NIL.

(3) FIXED THE NTH PROBLEM,  NTH((A . B) 2) = B, NTH((A .  ) 3) = NIL.

(4) LET ME WAIT ON ANSWERING THIS FOR A WHILE.
(I DIDNT UNDERSTAND IT COMPLETELY)

(5) DONT AGREE WITH  CONC AND LCONC, SINCE THAT COSTS ANOTHER CONS,
AND ON SHORT LISTS, THIS IS MORE THAN THE COST OF CDRING
DOWN. I WOULD CONSIDER ADDING A TCOLLECT OR SOME SUCH THING.

(6) POSTPONE THIS. I LOOKED AT IT ONCE AND IT SEEMED HARD.
LETS TALK ABOUT IT.

(7) OK. EXCEPT THAT THAT WAY IT DOESNT GET ON THE HISTORY LIST.

(8) I FORWARDED THIS COMPLAINT TO BBN.

(9) I FIXED THIS.

(10) SORRY NO CAN DO. R AND RC ONLY WORK WITHIN
THE CURRENT EXPRESSION, THEY DONT DO UPS OR ANY SUCH THING.
SO THEY CANT WORK.  I COULD DO A SPECIAL
CHECK TO AVOID DOING THE CHAACTER RECOGNITION
THING FIRST, BUT SEEMS FRIVOULOUS..

WARREN
From: BRYANT at BBN-TENEX
Re:    HELP

COULD YOU GIVE ME THE DETAILS ON HOW I CAN USE YOUR
PRINTOUT ROUTINE AT AI LAB?  THAT IS, IF YOU DON'T MIND MY USING IT
ONCE A WEEK OR ONCE EVERY OTHER WEEK. THE QUESTIONS ARE:
  1.  TO WHAT FILE DO I SHIP MY FILES FROM BBN TO AI LAB.  I THINK I HAVE
       AN ACCOUNT THERE BUT AM NOT SURE.
  2.  ONCE THE FILE IS THERE, THEN WHAT DO I DO?


HAVE BEEN USING CLISP AND I REALLY LIKE IT.  THANX.

                                         PENNY
-------
From: BRYANT at BBN-TENEX
Re:   LISTING FILES AT AI LAB
- - - -
THANKS FOR THE INSTRUCTION - YOUR'RE REALLY GREAT.  I'LL TRY IT TODAY.
-------
Date: 4-SEP-73 2015 From: TEITELMAN Re: SYSTEM DATE cc: LISP USERS
- - - -

THE VALUE OF THE VARIABLE MAKESYSDATE WILL BE
THE DATE THE SYSTEM MADE. THIS SHULD AID IN
TRACKING DOWN WHICH SYSTEM YOUR SYSOUT WAS MADE FROM.

WARREN
-------
Date:  4-SEP-73 2016 From: TEITELMAN cc:   LAMPSON
- - - -
I REMEMBERED WHY I WANTED TO PRINT SMALL LISTS ON
THE SAME LINE: FOR THINGS LIKE
(IF (FOO X) AND (FIE Y) MEMB Z  ...

HOWEVER I THINK I CAN DISTINGUISH THESES CASES
FROM THE TROUBLESOME ONES.

WARREN
-------
Date:  5-SEP-73 1147 From: TEITELMAN Re:NEW LISP,CHANGES IN I.S.cc:   LISP USERS

THERE IS ANOTHER NEW LISP. THE PRETTYPRINT ALGORITHM
FOR CLISP HAS BEEN CHAGED SLIGHTLY. ALSO THERE
HAVE BEEN SOME NEW ITERATIVE STATEMENT OPERATORS,
ALWAYS, NEVER, AND THEREIS, PLUS SOME CHANGES TO
THE FUNCTION I.S.OPR DESCRIBED IN THE MEMO
<LISP>LISP.MEMO.

WARREN
-------
Date: 10-SEP-73 2340 From: TEITELMAN
Re:   LARRY,
WHY DIDNT YOU TELL ME ABOUT CLISPIFY ((PLUS 11 2 X)) 
GOING TO 11+2+X EARLIER? THATS A  BUG WHICH
MUST HAVE BEEN INTRODUCED RECENTLY, BECAUSE
I AM SURE THAT USED TO WORK CORRECTLY. 
IT CERTAINLY WAS NOT INTENDED TO DO THAT.

WARREN
Date: 11-SEP-73  056  From: TEITELMAN Re:   VARIOUS
- - - -
ALICE IS LOOKING AT COMPILER PROBLEMS.
THE THING WITH ARG AND LAMBADA ATOM CERTAILY SHOULD WORK.
THIS WILL BE FIXED. AS FAR AS FUNCTION LAMBDA IN A BLOCK IS
CONCERNED,  CURRENTLY THIS IS NOT
TREATED AS PART OF THE BLOCK (NOR IS THERE ANYTHING IN
THE MANUAL TO LEAD YOU TO HIS BELIEF), HENCE IT
 IS COPILED AS A SEPARATE EXTERNAL FUNCTION. ALICE
IS LOOKING AT IT AND MAY CHANGE IT AS PE YOUR SUGGESTION,
EXCEPT I DONT AGREE THAT THE F/L SHOULD BE ADDED TO ENTRIES -
PASSING IT BACK OUT OF THE BLOCK SEEMS LIKE A BAD IIEA.
BUT MAYBE SHE WILL FIX IT.

MORE TO COME.
Date: 11-SEP-73  103 From: TEITELMAN
- - - -
(1) CAANOT GLOM COLLECT FOO -> COLLECT (FOO *IT*))  INTO CODE.
I AM SURE YOU WOULDNT WANT TO SEE $$TEMS AND $$TEM1'S IN YOUR CLISP,

(2) I DONT LIKE THE IDEA THAT IT WOLD BE HANDLED DIRFFERENTLY
IN THE CASE OF DO THAN IN COLLECT FOR EXAMPLE (AND NEITHER
WOULD YOU IF YOU THOUGHT AOUT IT), E.G.
FOR X IN L BY (FOO) COLLECT PRINT  WHERE  FOO SETS THE FREE VARIALBE
PRINT.  
I HAVE NO WAY OF DISTINGUISHING BETWEEN SYSTEM FUNCTIONS
AND USER COMPILED FUNCTIONS, AND I AM SURE THAT
WEREE I MTO MAKE THIS DISTINCTION, YOU WOULD NOT LIKE
IT EITHER.  I AM MORE NCLINED TO THINK THAT
WHEN IT IS THE NAME OF A FUNCTION AND NOT THE NAME OF A VARIABLE
I MAKE THE TRANSFORMATION WITHOUT BOTHERING YOU, PERIOD.
I THINK THAT YOU ARE THE ONLY PERSON THAT HAS EVER
ENCOUNTERED ANY PROBLEMS, AND YOUHAD TO STRAIN TO
CONSTRUCT A SITUATION WHERE IT FAILED, AND FURTHERMORE,
IT DEPENDEND ON THE VERY POOR PRACTICE OF HAVING THE SAME
NAME FOR FUNCTION AS FOR A VARIABE. IF I SET UP DWIM SO
THAT IT NEVER TOOK ANY CHANCES, IT WOULDNT BE VERY HELPFUL.
THE WHOLE THING IS PROBABILISTIC ANYWAY.

I AM GETTING THE IMPRESSION THAT YOU HAVE NOT THOUGHT
VERY MUCH ABOUT THIS PARTICULAR SITUATION, SINCE YOU
ARE VACILLATING BACK AND FORTH. LETS TALK ABOUT IT.

WARREN
-------
Date: 11-SEP-73  209 From: TEITELMAN
- - - -

YOUR CLISPIFY (PLUS 10 2) THING IS A RESULT OF A GLITCH
SEVERAL MOONS AGO. AT ONE TIME, CLISPIFY WAS DUMPED
OUT WITH THE DECLARATION FOR MIXED ARITHMETIC. AS
A RESULT, PLUS, TIMES, ETC. ALL MISTAKENLY HAVE
THE PROPERTY CLISPINFIX ON THERE PROPERTY LISTS.
YOU CANFIX THIS BY SIMPLY REMROPING IT, OR ELSE WAIT
TILL NEW SYSTEM.

WARREN
Date: 11-SEP-73  251 From: TEITELMAN

LARRY,

ALICE REPORTS THAT BLOCKCOMPILING CALL TO LAMBDA ATOM HAS BEEN FIXED.
SO PLEASE MAKE A NOTE THAT WHEN NEW SYSTEM COMES UP,
CHECK OUT THE PROBLEM YOU REPORTED TO ME, I FORGET
WHICH OF YOUR TWO FILES IT WAS IN. THIS
WAY I CAN FORGET ABOUT IT.

WARREN
Date: 11-SEP-73  308 From: TEITELMAN Re:   STRPOSL
- - - -

STRPOSL OPERATES MUCH MUCH FASTER IF YOU GIVE IT
A PREPARED BITTABLE. TAKE YOUR CAALS TO STRPOSL IN
MATCHBLOCK AND REPLACE THE LIST BY AN ARRAY
OBTAIED FROM CALLING FUNCTION MAKEBITTABLE ON THAT LIST.
SEE ME FOR MORE INFO.

WARREN
Date: 11-SEP-73  150 From: TEITELMAN 
- - - -
LARRY,

IN ORDER TO MAKE PRSTRUC WORK CORRECTLY ON PATTERNS,
I MUST DO A GETHASH ON EACH LIST FOR WHICH CAR IS
NOT THE NAME OF A FUNCTION. JUST THOUGHT
YOUD LIKE TO KNOW.

WARREN
Date: 12-SEP-73  354 From: TEITELMAN
- - - -
LARRY,

THERE IS A NEW LISP ON MY DIRECOTRY CAALED LISPX.SAV

FOR THE TIME BEING, THE
PAATIAL CLISIFICATION PROBLEM IS AVIDED BY RETURNING TO
THE OLD STATE. ALL OF THE PROBLEMS YOU REPORTED TO ME
THAT AFFECT MY TUFF HAVE BEEN FIXED. IN ADDITION, YOUR
BLOCK COMPILING PROBLEM WITH THE ARG HAS BEEN FIXED
(BUT YOU SHOULD CHECK IT OUT). THE FUNCTON LAMBDA PROBLEM
HAS NOT YET BEEN FIXED.

******DO NOT PUT COMMENTS INSIDE OF CONS OR NCONC******
COMMENTS SHOULD ONLY BE PUT WHERE THEY ARE SAFE. 
IT IS QITE OSSIBLE THAT COMPILATION OF CONS AND NCONC
WILL BE CHAGED OUT FROM UNDER YOU. THIS IS VERY
POOR PRACTICE ON YOUR PART.

WARREN
Date: 12-SEP-73  518 From: TEITELMAN

WORKING MY WAY THRU YOUR VARIOUS GOODIES.

ANYWAY IN ONE  XAMPLE YOU STATE
(FOR X IN (--) WHEN X }FMEMB LAST-PRINTSTRUCTURE:1 DO
(PRINT X)) FAILS.
I FOUND A FEW PROBLEMS WITH THAT. HOWEVER,
YOU DO KNOW THAT LAST-PRINTSTRUCTURE:1 WILL ALWAYS BE TREATED
AS (IDIFFERENCE LAST (CAR PRINTSTRUCTURE)), I.E.
IT EITHER BREAKS IT APART OR IT DOESNT, NOTHING HALFWAY.
YOU SHULD HAVE WRITTEN LAST-PRINTSTRUCTURE :1.

WARREN
Date: 12-SEP-73 1719-EDT From: BRYANT at BBN-TENEX Re:SOME NOTES ON <NEWLISP>LISP AT BBN
FOLLOWING ARE SOME THINGS WHICH I NOTICE AND FIND ANNOYING:
   1.  FILES CREATED IN <NEWLISP> CANNOT BE READ FROM REGULAR LISP.  THIS
       MEANS THAT IF THE FILES ARE  SENT TO SITES WITH NO <NEWLISP> I 
       CAN'T EVEN GET ON FIRST BASE.
   2.  IF I USE 'CL' COMMAND IN THE EDIT I OCCASIONALLY GET BACK ON
       'COND' THENELSE WITH NO PACE BETWEEN 'THEN' AND 'ELSE'. 

       SO WHEN I INTERPRET THE CL'ED FUNCTIONS I GET ERRROR.  THERE
      WAS ONE CASE IN WHICH A PAIR OF PARENTHESIS WAS MISSING
        THEREBY PUTTING THE EXPRESSION ON A WRONG LEVEL - BUT I CAN'T
        SEEM TO RECONSTRUCT THIS PROBLEM.
   3.  I DID THE FOLLOWING*
         (FP-RULES ← '(((EQUAL A B..............)
       WHICH PROMTED WITH A MESSAGE
          ≠≠(IN RULES) TREATED AS CLISP     U.B.A.    FP
        THE EXPRESSION WAS THEN CHANGED TO
         ≠(IDIFFERENCE FP (SETQQ RULES (((EQAUL A B.........)
        THAT DWIM INTERPRETATION STINKS, BECAUSE IT'S PRETTY OBVIOUS
        WHAT I MEAN.  OF COURSE IF I DO (SETQ FP-RULES....) IT WORKS.


HOPE MY COMMENTS ARE OF USE.  I TRY AVOIDING THESE TRAPS BUT IT
WOULD BE NICE IF THEY WEREN'T TRAPS AT ALL.   ALSO, NOTE THAT
THE SECOND ERROR IS BAD SINCE I CAN'T USE  CL TO MAKE
A NICE LISTING, WHICH IS WHAT I WANT TO USE  CLISP FOR.
Date: 12-SEP-73  518 From: TEITELMAN Re: WORKING MY WAY THRU YOUR VARIOUS GOODIES.

ANYWAY IN ONE  XAMPLE YOU STATE
(FOR X IN (--) WHEN X }FMEMB LAST-PRINTSTRUCTURE:1 DO
(PRINT X)) FAILS.
I FOUND A FEW PROBLEMS WITH THAT. HOWEVER,
YOU DO KNOW THAT LAST-PRINTSTRUCTURE:1 WILL ALWAYS BE TREATED
AS (IDIFFERENCE LAST (CAR PRINTSTRUCTURE)), I.E.
IT EITHER BREAKS IT APART OR IT DOESNT, NOTHING HALFWAY.
YOU SHULD HAVE WRITTEN LAST-PRINTSTRUCTURE :1.

WARREN
Date: 13-SEP-73 1609 From: TEITELMAN Re:   PRSTRUC
LARRY,

IT WAS A SIMPLE SILLY PROBLEM AND IS NOW FIXED.
ALSO 
I ISNTALLED A VARIABLED CALLED INVISIBLEVARS WHICH
IS INITIALIZED TO THINGS LIKE ($$TEM $$VAL  ETC.)
I.E. THINGS NOT TO APPEAR ON VARS. IF YOU WANT TO
ADD SOME OF YOUR STUFF THERE, YOU CAN DO IT IN MATCH - INITIALLY,
AND THEN TELL ME WHAT TO PUT IN AND I WILL
DO IT IN PRSTRUC. NO MAYBE, SINCE MATCH IS LOADED
SEPARATELY, PUT ON YOUR VARS
AN ADDVARS INVISIBLEVARS  WITH THE APPROPRIATE NAMES.

WARREN
(response to:)
I DUNNO WHAT YOU DID, BUT...

YOU MUST HAVE PUT THE WRONG THING AROUND THAT GETHASH ON THE NEW
PRINTSTRUCTURE, CAUSE IT NOW, I BELIEVE, PUTS THE WHOLE THING
ONTO TREELIST, CAUSING WRETCHED THINGS TO HAPPEN TO THE HIDDEN CODE,
THE PRINTSTRUCTURE PRINTOUT, AND INCIDENTALLY, THE END PART OF
OF THE CLISP: 'D CODE WHICH WAS NOT COPIED...
I.E.
DEFINE(((TEST(X)(FOR I FROM 1 TO X DO (FOO I))
]

and after dwimifying...

PRINTSTRUCTURE(TEST)

TEST   PROG
	$$VAL
	SETQ	I
... ETC... AND, THEREAFTER, EVERY FOR IS TRANSLATED WITH AN EXTRA
(FOO) AT THE END...

Date: 13-SEP-73 1609 From: TEITELMAN
- - - -
NEW PRSTRUC IS ON PRSTRUC.COM ON MY DIRECTORY IF YOU WANT TO TRY IT
BEFORE THE NEXT LOADUP.

WARREN
-------
Date: 13-SEP-73 1652 From: TEITELMAN Re:   FGETD

THAT IS A FEATURE! GETD DOES A CONS FOR EACH CALL ON
A SUBR. FGETD WAS INTENDED TO BE A QUICK CHECK
TO SEE IF A FUNCTION HAD A DEFINITION. 

WARREN
-------
(response to:)
THE VALUE RETURNED BY THE FUNCTION FGETD AND THE MACRO EXPANSION
OF FGETD ARE DIFFERENT FOR SUBRS!!! (FGETD RETURNS (0 . 915) WHILE
THE COMPILATION OF
(TEST (LAMBDA(X)(FGETD X]   ... RETURNS JUST 915.

			LARRY

(counter response)
IT'S OK IF FGETD RETURNS DIFFERENTLY FROM GETD ON SUBRS, AS LONG
AS AN INTERPRETED (FGETD X) AND A COMPILED (FGETD X) RETURN
THE SAME VALUE... (OR THAT THE FORMER CAUSES AN ERROR)...

				LARRY
Date: 13-SEP-73 1806 From: TEITELMAN Re:   NEW FEATURES IN ITERATIVE STATEMENTS
cc:   DEUTSCH, KAPLAN, LAMPSON, MCCREIGHT
- - - -


I HAVE INSTALLED SYNONYMS IN ITERATIVE STATEMENTS.
IF I.S.OPR IS CALLED WITH SECOND ARGUMENT ATOMIC,
IT MAKES FIRST BE SYNONYMOUS WITH SECOND.
IN THIS CASE, THE ARGUMENT CAN BE ANY OF THE
ALREADY EXISTING I.S. OPERATIVES. E.G.
BY PERFORMING I.S.OPR(FIND FOR)  AND
I.S.OPR(SUCHTHAT THEREIS)
ONE CAN WRITE:
FIND X FROM 1 TO 10 SUCHTHAT X↑2=25
AND GET BACK 5 AS THE VALUE.

CURRENT SYNONYMS ARE:  WHERE FOR WHEN,
FIND FOR FOR, SUCHTHAT FOR THEREIS, AND ISTHERE FOR THEREIS,
E.G.
ISTHERE NUMBERP IN X   WILL
RETURN NIL OR THE NUMBER.

ALSO, I HAVE USED THIS FEATURE TO ELIMINATE THE
CHECKING FOR BOTH UPPERCASE AND LOWERCASE IN DWIMIFYING,
I.E. for IS ESSENTIALLY TREATED AS A SYNONYM FOR FOR.

WARREN
FROM MASINTER, RE RECORDS
THERE ARE A FEW ERROR SITUATIONS WHERE I CURRENTLY CALL
ERROR WITH RECCOMPOSE0, BUT WOULD RATHER ERROR IN SUCH A WAY THAT
DWIMIFICATION ABORTS:

(CREATE FOO ...) WHERE FOO CAN'T SPELLING CORRECT TO A RECORD NAME

(CREATE FOO   FIE←... ) WHERE FIE CAN'T SPELLING CORRECT TO THE NAME
OF A FIELD OF FOO

(CREATE FOO  ...   ) WHERE ... IS NOT OF THE FORM FIELD←VALUE ...

IF I JUST ERROR, DWIM GOES ON TO GIVE (POSSIBLE PARENTHESIS ERROR)'S..

WOULD YOU LET ME KNOW HOW YOU WANT ME TO HANDLE THESE?
(I.E., SHOULD I USE CLISPERROR, AND/OR COULD YOU SET UP SOME ERROR
NUMBERS FOR ME, OR HOW I CAN SET THEM UP?).

			THANKS

			LARRY
--------------------
THE FILEDEF PROPERTY IS CORRECTLY ON RECCOMPOSE0, BUT MISSING FROM
RECORD AND TYPERECORD.... AS FOR YOUR PREVIOUS MESSAGE WRT THE RECORDWORD
FOR RECCOMPOSE0, ETC, RECORD AND TYPERECORD ARE TOP-LEVEL FUNCTIONS,
(NLAMBDA'S EVEN), LIKE DEFINEQ... AND SHOULDN'T BE LOWERCASED...

COULD YOU PUT FILEDEF RECORD.COM ONTO RECORD AND TYPERECORD, PLEASE?

THANKS.....

			LARRY
Date: 14-SEP-73  453 From: TEITELMAN Re:   NEW LISP
cc:   LAMPSON, JACKSON

THERE IS A NEW LISP ON MY DIRECTORY UNDER LISPY.SAV
THIS LISP PURPORTS TO HAVE ALL OF THE PROBLEMS FIXED, THOUGH
I WANT TO DO A LITTLE BIT OF TUNING AND TIMING. PARTIAL CLISPIFICATION
IS HANDLED CORRECTLY IN ALL CASES, PLUS THE NEW FEATURES ADVERTISED
FOR ITERATIVE STATEMENTS, PLUS ALL OTHER PROBLEMS THAT HAVE BEEN REPORTED
ARE FIXED. BANG AWAY AND REPORT ANY PROBLEMS A.S.A.P.

WARREN
Date: 14-SEP-73 1545 From: TEITELMAN
LARRY

I WOULD PREFER THAT YOU TRY TO  AT LEAST
MAKE AN APPEARANCE IN THE AFTERNOONS, AT LEAST
A LITTLE MORE OFTEN THAN OVER THE
LAST COUPLE OF WEEKS. I WANTED TO TALK TO
YOU ABOUT  ECORDS AND STUFF SO THAT
MAYBE IT COULD GET IN THE SYSTEM THIS WEEKEND,
BUT IT DOESNT LOOK LIKE THATS GOING TO HAPPEN NOW.

WARREN
Date: 15-SEP-73 1657 From: TEITELMAN 

TO GIVE YOU AN IDEA OF THE AMOUNT OF HAIR IN THE SYSTEM -
YOUR RPLACA OR EXAMPLE ONLY FAILED FOR THOSE SPCIFIC CASES
BECAUSE OF THE FOLLOWING-
WHEN TRYING TO DECIDE WHETHE OR NOT TO REMOVE PARENTHESES,
CLISPIFY ASKS -IS THERE AN OPERAND ON THE LEFT AND WILL
THE INNER OPERAND STOP THE SCAN ON DWIMIFYING,
E.G. (ITIMES A (IPLUS B C)) MUST GO TO A*(B+C).
AND ALSO IS THERE AN OPERAND ON THE RIGHT AND WILL
ITS OPERATOR STOP THE SCAN FOR THE INNER ONE
E.G. (ITIMES (IPLUS A B) C). HOWEVER
SOME OPERATORS WORK DIRFFERENTLY ON LEFT THAN RIGHT,
I.E. (IPLUS (SETQ X Y) Z) MUST GO TO (X←Y)+Z
WHEREAS (IPLUS X (SETQ Y Z)) GOES TO X←Y+Z.
SIMILAL (IQUOTIENT (IQUOTIENT A B) C) GOES TO
A/B/C  BUT (IQUOTIENT A(IQQOTIENT B C)) GOES
TO A/(B/C). ANYWAY, FOR PRLACA, IT WAS CLISPIFYING
CDDR OF THE FORM I.E. THE OR BUT IT DIDNT INDICATE
THAT THERE WAS ALREADY A LEFT HAND OPERATOR, SO IT
DIDNT BOTHER TO CHECK OR AGAINST ←. 
I FIXED THIS.

(JUST THOUHT YOUD LIKE TO KNOW THAT YOUR PATTERN COMPILER
ISNT THE ONLY "MESSY" THING  AROUND).
AND THAT MESSY DOES NOT NECESSARILY = BAD, IT JUST
MEANS A LOT OF CARE WAS TAKEN FOR SPECIAL  CASES.

WARREN
Date: 15-SEP-73 1715 From: TEITELMAN Re:   LOWERCASING

TO MAKE CREATE LOWERCASE, PUT ON
ITS PROPERTY LIST UNDER PROPERTY CLISPWORD
THE PROPERTY (NIL . create). similarly for anything else. 
THIS SHOULD NOT (HOPEFULLY) HAVE ANY ADVERSE EFFECTS
ANYWHERE. IF IT DOES, LET ME KNOW. (I HAVE LOOKED
AROUND AND SEEN HOW GENERAL I HANDLE THE CLISPWORD
PROPERTY AND I THINK I HAVE BEEN CAREFUL.
DONT PUT (FORWORD . create) or IFWORD
 AS THIS WILL CAUSE DWIIFY TO ATTEMPT TO INTERPRET
THEM IN THATFASHION.

WARREN
Date: 15-SEP-73 1729 From: TEITELMAN 
LARRY

PUT ON THE PROPERTY LIST OF  RECORD AND TYPERECORD
UNDER THE PROPERTY CLISPWORD
A PROPERTY OF THE FORM (RECORDWORD --)
I SUGGEST THAT YOU ALSO PUT ON THE PRORTY
OF CREATE AND create A PROPERTY OF THE FORM
(RECORDWORD . create)  IN AAL CASES, I WILL THEN
CALL RECCOMPOSE0  GIVING IT FAULTX
AS AN ARGUMENT (SO THATYOU CAN TELL WHETHER ITS RECORD,
TYPEREOCRD OR CREATE.) YOU CAN ADD NWE WORDS
IN THIS WAY AND DWIM WILL CALL YOU. 
ALSO LOWERCASE WILL TAKE PLACE.
WARREN
Date: 15-SEP-73 1734 From: TEITELMAN

IF YOU ALSO   WANT RECORD TO CLISPIFY BACK TO LOWER CASE,
PUT (RECORDWORD . record) ON ITS PROPERTY LIST.
DONT FORGET TO PUT PROPERTIES ON BOTH UPPER AND LOWER
CASE IF YOU DO THIS SOTHAT (record --) WILL CAUSE A CALL TO RECCOMPOSE0.

WARREN
Date: 18-SEP-73  722 From: TEITELMAN

THE PARENTHESES ERROR THING IS DUE TO A NEW
"FEATURE" IN WHICH QUOTE GENERATES AN
ERROR IF GIVEN MORETHAN ONE ARGUMENT. HOWEVER,
I FORGOT THAT I PUT AN  XPRESSINOF THE FORM
(QUOTE & & &) ON HISTRY LIST.
ILL HAVE TO FIX THIS.

WARREN
Date: 18-SEP-73  810 From: TEITELMAN
- - - -
I FIXED THE PARENTHESES ERROR PROBLEM. GLAD YOU CAUGHT THAT.
I ALSO MADE RESPELLS SAVED UNDOABLY (IT WAS KIND OF HARD SINCE
AT THAT POINT THE HISTORY LIST IS IN A FUNNY STATE WITH
LISPXHIST BEING EBOUND SO THAT IF YOU SAY NO
THE PRINTING DOESNT GET ON IT, BUT I GUESS YOUR POIN
WAS WELL TAKEN). WITH RESPECT TO TRYING CROPFN AFTER
BEING  TOED ON CROPFNS -> CROPFN S. THAT IS TOO HARD.
THE POINT IS THAT IT IS ATTEMPTING SPELLING CORRECTION
ON THE WORD CROPFN AT THAT POINT  BECAUSE IT
IS A LAMBDA VARIABE. AND WONT GET BACK TO TRYING IT AGAIN.
GIVEN  A COMPARISON BETWEEN CROPFNS AND CROPFN IT IS
MORE LIKELY TO BE A RUN ON ( I THINK) THAN A SIMPLE TYPO,
SINCE THE ODDS OF STICKING AN EXTRA CHARACTER IN
(A LOW PROBABILITY EVENT ANYWAY UNLESS IT IS A DOUBLE 
CHARACTER,I.E. CROPFNN IN WHICH CASE IT WOLD CORRECT TO CROPFN,
ARE SMALL COMPARED TO THE ODDS THAT IT IS A RUNON.
AND I CANT TRY BOTH BECAUSE IT COMES BACK WITH
THE INFO THAT THIS MIGHT BE A RUNON AND THEN CONTINUES
DOWN THE SPELLING LIST (THERE MIGHT BE A CROPFSN  OR SOMETHING
LATER ON WHICH IS A BETTER MATCH). AT THE TIME YOU
ARE ASKED, CHOOZ IS ALREADY FINISHED AND EXITED, AND
CANT GET BACK IN.  I THINK IN GENERAL THAT MOST
SPELLING MISTAKES DO NOT CONSIST OF ADDING AN EXTRA
CHARACTER ON. HOWEVER, YOU CAN DEFET THE RUNON CORRECTION,
BY TURNING OFF A FLAG, IN WHICH CASE IT WOLD 
GIVE YOU THE CROPFNS --> CROPFN, BUT WOLD NEVER DO RUNONS.


WARREN
Date: 19-SEP-73  215 From: TEITELMAN

RECEIVED YOUR THREE BUG REPORTS. 
ALL SEEM VALID, AND WILL FIX A.S.A.P.

WARREN
Date: 19-SEP-73  337 From: GUEST Re:   labeller paper
- - - -
two things.
1) i'd like you to take a look at &j525.kernel.technique.try2
on sys12 (wyl).  it's my second iteration. (you might like to see
kernel.technique itself, too).  May be to simple, but i'd like your comments
2) dennis and i went over the whole paper, doing some chopping(literally)
and pasting. we changed the order of some things a
bit and added a connecting phrase or two
to make it more readable.  as soon as 
there is an on-line version, i'll let you know.

ray
FROM MASINTER RE: RECORDS:

THINGS ARE WORKING QUITE WELL; THERE ARE JUST A FEW THINGS I NEED...

1) CAN YOU, IN CLISPIFY, AFTER CHECKING THE GETHASH AND FINDING
SOMETHING, CHECK IF THE CAR OF THE FORM IS
 (A) EITHER COMPOSE OR compose
   (B) (LISTP (GETP (CAR FORM) (QUOTE ACESSFN]
  AS BOTH COMPOSE AND THE FIELD REPLACES ARE DONE BY FIRST
  DWIMIFYING AND THEN HIDING THE MEANING UNDERNEATH....

2) I DON'T KNOW HOW TO GET "COMPOSE" AND "USING" TO LOWERCASE
ON CLISPIFICATION... THE CLISPWORD PROP, PUTTING ON
CLISPWORDS, DOESN'T SEEM TO WORK.... I LOOKED AT THE CODE AND IT
LOOKS LIKE A LITTLE DIDDLE... JUST A GLITCH
THAT I DON'T THINK CAN BE DONE WITHOUT MODIFYING YOUR CODE...

3) I've implemented some of it via DWIMUSERFN... if you'd
   incorporate that into the dwim stuff, we could leave
  DWIMUSERFN for users...

.....

the files are RECORD and RECORD.COM, with copies on <NEWLISP>

try it!.
			LARRY
Date: 28-SEP-73 2322 From: TEITELMAN Re:   FIRST OF MANY
- - - -

I DECIDED TO DO AWAY WITH NORMAL AND STANDARD.
CLISPDEC(STANDARD) NOW MEANS RPLACA AS OPPOSED TO FRPLACA,
MEMB AS OPPOSED TO MEMB, ETC.
THERE IS NO CLISPDEC(NORMAL)
AND THE INITIAL SETTING FOR THE SYSTEM IS
CLISPDEC((STANDARD INTEGER))

WARREN
Date: 28-SEP-73 2337 From: TEITELMAN Re:   2

UNDOCUMENTED  FEATURE -
YOU ASKED FOR A WAY OF LOOKING UP THE VALUE OF A VARIABLE IN
A LOCAL DECLARATON. 
CALL CLISPLOOKUP WITH ITS FIRST ARGUMENT, WORD, THE NAME OF
THE VARIABLE, AND ITS FIFTH ARGUMENT, CLASS, THE ATOM VALUE.
CLISPLOOKUP WILL RETURN WITH CAR OF THE ATOM AS ITS VALUE IF
THERE IS NO LOCAL DECLARATION RELEVANT. YOU MAKE DECLARATIONS
BY WRITING SOMETHING OF THE FORM (VARIABLE = EXPRESSION)
IN THE DECLARATIONS. IF SUCH  DECLARATION APPEARS,
THE VALUE OF THE LOOKUP IS THE ESUT OF EVALUATING EXPRESSION.
E.G. (VARDEFAULT = T) WILL RETURN T.

NEW LOADUP TO BE AVAILALBE SOON. SORRY TO BE SO LONG.

I AM TRYING TO GET IT ALL DONE.

WARREN
Date: 28-SEP-73 2348 From: TEITELMAN
- - - -
WHEN LOADING MATCH.COM I GOT AN EQLENGTH NOT DEFINED
WHEN LINK TRIED FROM MATCHBLOCK. GUESS
YOU SHOULD REARRANGE YOUR BLOCK DECLARATIONS.

WARREN
Date: 29-SEP-73 1513 From: TEITELMAN

OK, I THINK I GOT EVERYTHING COVERED.

FIRST, PATTERNS NOW DWIMIFY TO EXPRESSIONS OF THE
FORM (match EXPR PATTERN). THEY  CLISPIFY
BACK CORRECTLY. FURTHERMORE, IF YOU EDIT THE 
EXPRESSION BY DOING AN R, THEREBY CAUSING THE TRANSLATON TO
GO AWAY, DWIMIFY KNOWS ABOUT match. THIS SEEMED LIKE ONE OF
YOUR BETTER IDEAS.

SIMILARY, LOCAL DECLARATIONS OF RECORDS DWIMIFY TO ONE OF
TWO FORMS (fetch FIELD of ARG) or (set FIELD of ARG to --).
I CALL THE FUNCTION CLISPRECORD WITH TWO ARGUMENTS,THE
FIRST THE LOCAL DECLARATION, THE SECOND ONE OF THE ABOVE.
((THE REASON FOR NOT BURSTING THEM APART IS THAT
IT MAKES IT EASIER TO HANDLE THE CASE WHERE THE USER
EDITS THE EXPRESSION, CHANGING PERHAPS THE ARG NAME,
AND THEN REDWIMIFIES. NOW IT ISNT IN COLON NOTATION,
SO IT IS EASIER JUST TO CALL YOU). CLISPRECORD
IS RESPONSIBLVE FOR DOING THE CLISPTRAN. 
THE VALUE OF CISPRECORD IS NOT USED.

I WAS ABLE TO RESOLVE THE HASH PROBLEM (I EXPERIMENTED
AND THRASHED ARUND WITH ABOUT TWENTY DIFFERENT
CONFIGURATIONS OF CLISPATOM2 CLISPATOM2D AND CLISPCAR/CDR -
IN FACT, DID YOU KNOW IN THE CURRENT SYSTEM  X:1:PATTERN DOESNT
WORK?)
SO THAT THE ONLY TIME IT HAS TO REHASH IS WHEN
THE ORIGINAL EXPRESSION WAS PARENTHESIZED, I.E.
(PRINT (X:FOO)) AS OPPOSED TO (PRINT X:FOO).

THE ONLY GLITCH FOR YOU TO BE  AWARE OF IS THE FOLLOWING:
IN THE CASE OF set, USE THE TAIL FOLLOWING THE to, 
NOT THE SINGLE ELEMENT, I.E. (CDR  (MEMB 'to --))
NOT CADR, BECAUSE THE ARGUMENT MAY NOT YET HAVE
BEEN DWIMIFIED. FOR EXAMPLE, YOU MAY GET CALLED
WITH (set FOO of X to A + B). THE DWIMIFICATION TAKES
PLACE LATER. IT IS IMPORTANT HOWEVER THAT YOU DO NOT
COPY THE TAIL, USE IT IDENTICALLY. I HOPE THIS DOESNT
CAUSE A PROBLEM. IF SO, I CAN LOOK AT IT AGAIN, BUT
FOR THE TIME BEING IT MADE THINGS CONSIDERABLY EASIER FOR
ME.   (CONTINUED)

WARREN
Date: 29-SEP-73 1533 From: TEITELMAN Re:   MORE

LARRY,

SAME GOES FOR (fetch FIELD of --) I.E. USE
THE TAIL AND DONT COPY IT. ALSO, YOU MIGHT CHECK
FOR THINGS LIKE (set FOO of X : 2 to --).
THIS WONT EVER HAPPEN FROM A COLON EXPRESSION , BUT
MIGHT IF THE USER EDITS IT. IN THIS CASE, 
YOU WILL HAVE TO USE AN LDIFF IN THE TRANSLATION.
THIS MEANS THAT WHILE THE (set ) EXPRESSION WILL
BE DWIMIFIED, THE EXPRESSION IN THE TRANSLATION
WONT BE UNTIL ....

BETTER IDEA:
IN THIS CASE, PUT IN PARENTHESES, I.E.
IF (CADDR (MEMB 'OF ...)  IS NOT EQ TO 'TO  THEN
DO A /RPLNODE. ACTUALLY YOU DONT NEED THE MEMB
BECAUSE THERE SHOULD ALWAYS BE ONLY ONE THING
IN THE FIELD POSITION.

I THINK I HAVE COVERED EVERYTHING, INCLUDING CLISPIFYING.
I WILL SEND YOU A MESSAGE AS SOON AS I GET IT LOADED UP.
PROBABLY LATER THIS AFTERNOON.


TO SUMMARIZE:
CLISPRECORD IS ONLY CALLED WHEN LOCAL DECLARATIONS
OF RECORDS ARE INVOLVED.

(YOU SHOULD CHECK AND MAKE SURE THAT LOCAL DECLARATIONS FOR FAST,
ETC. TAKE EFFECT APROPRIATELY FOR GLOBAL RECORD DECLARATIONS, I.E.
THAT I GET THE RIGHT /SETFOO, SETFOO, OR FSETFOO OR WHATEVER).

IN THIS CASE IT IS GIVEN THE CORRESPONDING DECLARATION
AND THE EXPRESSION, OF THE FORM (fetch FIELD of --)
or (set FIELD of -- to --)
TAILS ARE PERMITTED FOR --, I.E. -- MAY BE A SEGMENT.
IN THE CASE OF THE LAST TAIL, YOU SHOULD USE THAT STRUCTURE
IDENTICALLY, SO THAT SUBSEQUENT DWIMIFICATION WILL
FIX IT. IN THE CASE OF THE TAIL BETWEEN
of AND to IN set, THIS CAN ONLY OCCUR
IF THE USER EDITS THE EXPRESSION HIMSELF. IN THIS CASE

OK. THINK I GOT IT MORE STRAIGHT IN MY HEAD.
IT IS NECESSARY THAT YOU USE THE LAST TAIL IN BOTH
FETCH AND SET, AS EVEN WHEN COMING FROM COLON NOTATON,
THEY HAVE NOT YET BEEN DWIMIFIED, AND EVEN IF ATOMIC,
I.E. (fetch FOO of X) YOU SHOULD USE(X) NOT X IN
YOUR EXPANSION BECAUSE IF X IS MISSPELLED IT WILL
BE CORRECTED IN THAT TAIL.

FOR CASES WHERE fetch OR set ARE ENCOUNTERED DIRECTLY,
I WILL FIRST DWIMIFY THEM, SO THAT YOU NEEDN'T WORRY
ABOUT DOING ANYTHING WITH THE CASE
OF (set FOO of X ← Y to Z) BECAUSE THAT SHOULD NEVER
HAPPEN. IN FACT, YOU CAN CHECK AND IF THERE IS NOT ONE
AND ONLY ONE THING BETWEEN THE of AND to, ABORT.
I WAS TRYING TO BALANCE EFFICIENCY AND COVERING ALL CASES.
THE CONFIGURATION I NOW HAVE  MAKES IT SIGHTLY MORE
INEFFICIENT WHEN THE USER EDITS THE fetch OR set
EXPRESSION WITHOUT CONVERTING IT BACK, BUT ONLY SLIGHTLY,
I.E. THE EXTRA CALL TO DWIMIFY, WHEREAS IN THE NORMAL
COURSE OF ANALYZING A COLON EXPRESSON, THE FUNCTIONS KNOW
AT ALL TIMES JUST WHAT HAS TO BE DONE, AND WHAT HAS ALREADY
BEEN DONE. 

WARREN
Date:  1-OCT-73 2018 From: TEITELMAN
LARRY,

I DONT HAVE A FUNCTIONNAMED DWIMIFY1C. WHAT DI YOU SEE
 - GIVE ME MORE INFO.
WARREN
Date:  2-OCT-73  045 From: TEITELMAN
THE NAME OF THE VARIABLE YOU WANT IS CALLED RAISEFLG.
RAISEFLG T CORRESONDS TO (RAISE T). YOU MUST
SET RAISEFLG IF YOU CALL RAISE, SINCE IT IS A SUBR
AND I CANT FIX IT TO DO IT AUTOMATCALLY. LOWERCASE(T)
DOES A RAISE() (STANDARD SETTING IN OUR SYSTEM) AND LOWERCASE(NIL)
DOES A RAISE(T). YOU CAN HAVE LOWERCASE(T) AND
(RAISE (SETQ RAISEFLG T)) FOR YOUR STANFORD CONFIGURAION.

WARREN
Date:  2-OCT-73  100 From: TEITELMAN
LARRY,

PLEASE PUT NEW RECORD, AND ANY OTHER FILES YOU MAKE, ON
NEWLISP, NOT LISP. THAT WAY I AM REMINDED TO FTP IT
TO BBN.

WARREN
Date:  2-OCT-73  114 From: TEITELMAN
ON YOUR REQUEST FOR
CLISPLOOKUP1 TO ALLOW A RECORD DECLARATION OF THE FORM
(TYPERECORD --) TWO THINGS. FIRST , WHAT IS THIS USED FOR?
SECOND, WILL THE CALL TO CLISPLOOKUP STILL
SPECIFY RECORD AS A CLASS AGUMENT, OR DO YOU
WANT RECORDS TO GET RECORDS, AND TYPERECORDS TO GET
ONLY TYPERECORDS.

WARREN
Date:  3-OCT-73 1327 From: TEITELMAN
LARRY,

YOU DIDNT ANSWER ME ABOUT TYPERECORD DELCARATONS.
FIRST OF ALL, WHAT IS A TYPERECORD - I PRESUME
FROM ANALOGY WITH RECORD THAT USER CAN SAY
(TYPERECORD --). DO YOU WANT CLISPLOOKUP TO RETURN
TYPERECORD DECLARATIONS ONLY WHEN CLASS IS TYEPRECORD,
OR IS TYPERECORD OR RECORD AN ACCEPTABLE RESPONSE
FOR EITHER RECORD OR TYPERECORD LOOKUPS?

WARREN
Date:  3-OCT-73 1751 From: TEITELMAN Re:   CLISPRECORD

OK, YOU ASKED FOR IT! ONE FUNCTION. HERE ARE THE VARIOUS
WAYS IT GETS CAALED AND WHAT IT SHOULD DO.
CLISPRECORD IS A FUNCTION OF THREE ARGUMENTS, X, FIELD, AND SETQFLG.

ITS VALUE IS ALWAYS EITHER THE EXPRESSION TO BE INSERTED
INTO THE CODE, OR ELSE NIL- II WHICH CASE I WILL GENERATE
THE APPROPRIATE ERROR DIAGNOSTIC.

CLISPRECORD CAN BE CALLED WITH BOTH X AND FIELD SPECIFIED.
AND SETQFLG INDICATING WHETHER IT IS A FETCH
OR REPLACE. IN THIS CSE, IT DOES A LOCAL LOOKUP, AND IF
IT FINDS ONE, CONSTRUCTS AN APPROPRIATE FETCH EXPRESSON
DOES THE TRANSLATION AND THE HASING AND RETURNS THE FETCH.
FOR THE SETQFLG=T CASE, IT SHULD JUST CONSTRUCT AN
EXPRESSION CAR OF WHICH IS replace AND PUT ANYTHING ELSE
YOU LIKE IN THE LIST BECAUSE I WILL CALL YOU BACK ON
IT WHEN I GET THE RIGHT HAND OPERAND. IN THIS CASE,
I.E. THE SECOND CASE, THE RIGHT HAND OPERAND WILL BE
THE SECOND ARGUMENT TO CLISPRECORD, E.G.
FOR X:FOO←T YOU WILL BE CALLED FIRST WITH
(X FOO T) AND RETURN (replace --) WHERE -- CAN CONTAIN
THE RESULTS OF THE LOOKUP AND OTHER PRTIAL INFO,  THEN
YOU WILL GET CALLED WITH THAT EXPRESSION AND T T.
NOTE, DO THE LOOKUP ON THE FIRST CAAL IN EITHER CASE,
SINCE IF THERE IS NO  ECLARATION, I WANT TO GENERATE
THE ERROR AT THE TIME OF THE FIRST CALL, NOT THE ECOND.

IF THERE IS NO LOCAL DECLARATION IN EITHER CASE, CHECK
FOR A GLOBAL ONE, AND THEN IF RECORDHASHFLG IS T,
DO THE TRANSLATON AS THOUGH IT WERE A LOCAL DECLARATION,
I.E. MAKE A FETCH OR REPLACE EXPRESSION, HASH IN THE FIRST CASE ETC.

DO SPELLING CORRECTION ON RECORDSPLST AT APPROPRIATE POINT.


FINALLY, CLISPRECORD ALSO GETS CALLED WITH FIELD=NIL
IN WHICH CASE X IS THE ENTIRE EXPRESSION, I.E. A FETCH
OR REPLACE, AND YOU CAN PICK OUT THE FIELDS AND WHAT NOTS
FROM THAT EXPRESSION. DONT FORGET TO USE THE TAIL
IN ALL CASES.  NOTE THT I AM CALLING CLISPRECORD
TO HANDLE FETCH AND REPLACE, NOT RECCOMPOSE0, BECAUSE
I HAVE TO CHECK FOR THEM ANYWAY (CANT DO IT JUST BY
CLISPWORD) BECAUSE I NEED TO DWIMIFY BEFORE CALLING YOU.

LET ME KNOW IF ANY OTHER CONFIGURATION SEEMS DESIRABLE.

WHAT I HAD BEEN DOING MYSELF IN THE CASE OF X:FOO←T
WAS MAKING AN  XPRESSION OF THE FORM
(replace DECLARATION OPERAND FIELD) OR SOME SUCH THING.

WARREN
-------
Date:  3-OCT-73 1813 From: TEITELMAN
- - - -

IT SEEMS THE ONLY KLUGEY PART IS THAT
YOU GET CALLED ON EXPRESSION  OF THE FORM
(REPLACE X OF Y WITH Z) WHERE THE Z IS ALEADY IN
THERE, AND ALSO ON PARTIALLY PROCESSED
EXPRESSIONS OF THE FORM (REPLACE --) WHERE Z IS THE SECOND ARGUMENT.
YOU CAN DISTINGUISH THESE TWO CASES BY THE FACT THAT IN THE
SECOND CASE, SETQFLG IS T, AND IN THE FIRST IT IS NOT.
I GAVE SOME MORE THOUGHT TO TRYING TO ELEIMINATE THE
DOUBLE CALL, BUT THE ONLY THING I MIGHT DO WOULD BE TO CREATE
SOME EXPRESSION MYSELF IN CLISPCAR/CDR AND NOT CALL YOU
ON THE ← CASE UNTIL LATER, BUT THEN YOU WOULD STILL
NEED TO DISTINGUISH THESE TWO CASES. I WOULD
LIKE YOU TO MAKE ME A RECORD (COMPILING IS NOT NECESSARY)
FILE THAT I CAN LOAD AND CHECK OUT WITHOUT NECESSITATING
LOADING UP A WHOLE NEW SYSTEM. IF YOU WANT TO WORK IN
MY SYSOUT TO CHECK IT OUT A LITTLE, USE LISPY.SAV AND
WORK ON MY DIRECTORY.

WARREN
-------
Date:  4-OCT-73 1720 From: TEITELMAN Re:   YOUR MESSAGE

IN WHAT SYSTEM DID YOU GET A H.D.F. IN HELPFIX1 - IN
STRAIGHT LISP OR IN MY SYSOUT ? WHAT HAD YOU
JUST DONE? I DONT HAVE MY CRASTAL BALL WITH ME.

WARREN
-------
Date:  4-OCT-73 1758 From: TEITELMAN Re:   VARIOUS RECORD STUFF
1. DID YOU EVER RESOLVE THE PROBLEM YOU WWERE HAVING IN MAKING
THE FILEPACKGE BELIEVE IN RECORD STUFF? TRY IT AGAIN.

2. WHAT ARE THE NAMES OF THE ARGUMENTS TO RECORD, TO CREATE,
AND TO TYPERECORD?

3. I THINK IT CONVEIENT IF YOU PERMIT BLANK FIELDS TO
BE SPECIFIED BY NIL. THATIS ESSENTIALLY WHAT YOU DO ALEADY
FOR CDR, E.G. THE USER CAN SAY
(RECORD FOO (A B . C)) OR (RECORD FOO (A B)) THE DIFFERENCE
BEING IN THE SCOND HE ISNT INTERESTED IN THE CDDR FIELD.
SIMILARLY, HE SHOULD BE ABLE TO SAY
(RECORD FOO (A NIL B)) THIS WILL B USEFUL FOR THE APPLICATION
WHERE THE USER WILL APPLY SEVERAL DIFFERENT RECORDS TO THE
SAME DATA STRUCTURE DEPENDING ON CONTEXT,  LIKE
PUTTING SEVERAL TRANSPARENCIES OVER THE SAME DRAWING.

4. I TRUST THAT YO DWIMIFY IN PROCESSING CREATE SO THAT
THINGS LIKE (CREATE FOO X ← Y + Z) WITH THE EXTRA SPACES, WORK.
I TRUST YOU ALSO DWIMIFY FOLLOWING THE USING  XPRESSION SO
THAT  USING X + Y * Z WILL WORK. 

5. CAN THE USER DECLARE A LOCAL TYPERECORD?

6. HAVE YOU BEEN ABLE TO IMPLEMENT GLOBALS SO THAT
FUNCTION DEFINITIONS AND MACROS FOR FAST AND UNDOABLE ARE
ONLY GENERATED WHEN NEEDED? I DOCUMENTED IT THAT WAY.

7. I THINK MAYBE RECORD AND TYPERECORD  SHOULD BE
FUNCTIONS. SINCE THEY DONT DWIIFY INTO ANYTHING,
WHAT HAPPENS IF THE USER COMPILES A FUNCTION CONTAIING
A RECORD EXPRESSION, II.E. IT IS AN INITIALIZATION
FUNCTION FOR A PACKAGE, AND HE COMPILES THE PACKAGE.

8. ONE OF THE MAIN ADVANTAGES OF GLOBAL DECLARATION IS
THAT THE USER CAN SIPLY CHANGE THE DECLARATION AND DOESNT
HAVE TO ECLISPIFY OR ANYTHING. HE CAN EVEN HAVE COMPILED
CODE. HOWEVER, THIS DOESNT WORK WITH RESPECT TO CREATES.
I.E. IF I DO A (RECORD FOO --) AND THEN SEVERAL (CREATES --)
APPEAR IN MY CODE, AND I RUN IT, AND THEN CHANGE THE DECLARATION
FOR FOO, HOW WILL THE CREATES BE UPDATED? I THINK MAYBE
YOU OUGHT TO CONSIDER AN IMPLEMENTATION CORRESPONING
TO THE GLOBAL/LOCAL TRADEOFF FOR CREAES AS WEEL. A GLOBAL
CREATE  SHOULD GO THROUGH AN INTERMEDIATE FUNCTION,
LIKE MAYBE  MAKE.FOO WHICHUSES THE DECLARATION OR SOMETHING.
AND A LOCAL CREATE, OR IF RECORDHASHFLG IS T, SHOULD WORK
AS IT DOES OW.

9. I PRESUME THATTHE NAMES FOR YOUR  GENERATED
ACCESS FUNCTIONS ARE OF THE FORM  GET.FOO  AND FOR THE
STORE FUNCTIONS SET.FOO OR REPLAC.FOO (WHICH). IN ANY EVENT,
IT NO LONGER IS NECESSAR THAT  FIELD NAMES BE UNIQUE
FROM FUNCTION NAMES, JUST THATTHEY BE UNIQUE FROM OTHER
FILED NAMES, RIGHT? IN THE CASE OF LOCAL DECLARATIONS,
THEY HAVE TO BE UNIQUE FROM OTHER FIELD NAMES WITHIN
THE SAME FUNCTION, RIGHT?



WARREN
From: MASINTER
I DON'T SEE A GOOD WAY AROUND DEFINING ALL OF THE FUNCTIONS BEFOREHAND
WITH GLOBAL RECORDS... IF USER SAYS
(RECORD A (B (C . D]
AND THEN WRITES (CLISP: UNDOABLE) X:C←'FOO,
AND RUNS IT, AND THEN MAKEFILES,
WHEN HE LOADS, HE'LL HAVE
(RECORD A (B (C . D] AND (/REPLACE.C X 'FOO]
THERE ISN'T AN EASY WAY FOR ME TO GET HOLD OF THAT /REPLACE.C;

I COULD PUT A CLISPWORD PROPERTY ON IT, FOR EXAMPLE, BUT
THAT'S ALMOST AS BAD AS DEFINING IT OUTRIGHT... BESIDES,
MANY OF THE PROBLEMS OF JUST DEFINEING THEM HAVE GONE AWAY...
I'VE REDUCED THE NUMBER OF UNDOSAVES, AND IF YOU
CAN GIVE ME A HANDLE INTO COMPILEUSERFN, I CAN ELIMINATE THE
MACROS.
-------
Date:  5-OCT-73 0306-EDT From: TEITELMAN 
- - - -

IF YOU ARE GOING TO MAPHASH THROUGH THE CLISPARRAY, THEN
THERE IS ABSOLUTELY NO JUSTFICATION FOR USING THE 
GET.FOO  REPLACE.FOO SCHEME OF IMPLEMENTING. MAYBE WE SHULD
JUST CONVERT EVERYTHING TO FETCHES AND REPLACES, AND LEAVE
THE ACCESSFN KLUDGE (UNDOCUMENTED) FOR YOU
AND PETER IF YOU WANT TO USE IT. CAN YOU COME IN TOMORROW
AND TALK ABOUT IT? I NEVER DID LIKE THE ACCESSFN
SCHEMA.

MEANWHILE, YOU SHOULD CERTAINLY CHECK FOR ACCESSFN. I THOUGHT
THAT WAS THE WAY GLOBAL DECLARATION WERE IMPLEMENTED ANYWAY.
WE NEED TO TALK MORE ABOUT THAT.

ALSO, I DONT UNDERSTAND PART OF YOUR MESSAGE.

I WOULD PREFER THAT YOU LEAVE IN THE TYPERECORD THING,
BUT THE CONVENIENCE OF BEING ABLE TO SAY FUMBLE? IS
SMALL COMPARED TO THE HASSLE WITH THE DECLARATIONS AND ALL.
WHY CANT THE USER JUST SAY  IF  X:1='FUMBLE     THATS
NOT SO MUCH LONGER THAN  IF FUMBLE? X AND ITS
ONE LESS ATOM, FUNCTION, MACRO, ET ALL TO WORRY ABOUT.

I HAVENT GOTTEN BACK TO CLISPIFICATIONS SO I AM SURE THAT IT DOESNT WORK
COMPLETELY.

HOW ABOUT GETTING LISTINGS OF YOUR LATEST STUFF AND LETS TALK TOMORROW.

WARREN
; THE JUSTIFICATION FOR USING THE ACCESSFN INSTEAD OF THE GETHASH
; IS THAT IT DOESN'T CLUTTER UP THE CLISPARRAY AND THAT IT IS VERY
; FAST -- I CAN DO A MOVD(CADDR GET.FOO) SO THAT (GET.FOO ...) CAN
; BE PUT IN EVEN VERY TIGHT LOOPS....
; THE MAPHASH WOULD BE
; (MAPHASH CLISPARRAY (F/L(X Y) (AND (EQ (CAR X)(QUOTE CREATE)) ...]

;I DONT THINK THAT WASHES. IF THE USER IS CONCERNED ABOUT
; EFIFICINECY, HE COMPILES, AND BOTH PRODUCE EQUIVALENT
; RESULTS. AS FAR AS CLUTTERING UP THE ARRAY, A GETHASH
; ONLY TAKES ABOUT 200 TO 500 MICROSECONDS, AND I THINK
; THAT THERE ARE NOT GOING TO BE AS MANY AS YOU THINK IN TERMS
; OF SHEER NUMBER. FOR EXAMPLE BUTLER, WHO USES ITERATIVE
; STATEMENTS A HELL OF A LOOOOOOOOAGE PR
;I DONT WANT TO TALK OVER THIS GODDAMN NETWORK.

; CAN I CALL YOU?
; OR I HAVE CLASSES IN THE MORNING AND A MEETING IN THE AFTERNOON TOMORROW.

;OK CALL ME NOW. 854-1862.
@BREAK (LINKS) 
Date:  5-OCT-73 1233 From: TEITELMAN

IF USER SAYS (RECORE FOO (A B . C))
AND THEN LATER (RECORD FOO (D E . C)) I THINK THAT
A AND B SHOULD GO AWAY. THEREFORE I THINK
THAT IF HE SAYS (RECORD FOO (D E . F)) 
A B AND C SHOULD ALSO GO AWAY. I GUESS I THINK ITS SAFER,
SINCE HE CAN ALWAYS MAKE A NEW NAME.

YOUR SECOND CALL TO CLISPRECORD IS SUPPOSED TO HAVE 
IN THE FIELD POSITION THE RIGHT HAND OPERAND FOR
THE ←, AND YOU GET THE FIELD NAME OUT OF THE
FIRST ARGUMENT WHICH IS THE (REPLACE EXPRESSIN).
IF IT DOESNT WORK THAT WAY (ILL CHECK IT) IT WILL
BE FIXED IN MY LATEST WORK.

WARREN
Date:  5-OCT-73 1822 From: JACKSON Re:   CLUMPIFY
WILL CHECK INTO YOUR FIRST MSG TONIGHT (RE DWIMIFYMACRO)--
AS REGARDS IMPLEMENTATION, MKATOM VS. PACK, ETC., THE
CURRENT SYSTEM IS ONLY A DEMO; IF THE FINAL SYSTEM MAKES NEW
ATOMS, I'LL TAKE YOUR ADVICE.  SORRY, MY MEMOS AREN'T ON FILE.
BUT THERE ARE A FEW MORE COPIES AT PARC, NEAR BOBROW'S
MAILBOX.

PHIL

GIVE ME A CALL IF YOU WANT TO ASK MORE QUESTIONS.
I.E. FIND AOUT WHAT OTHER FUNCTIONS THERE ARE.
PHIL
Date:  6-OCT-73 1300 From: TEITELMAN
THERE IS A UTILITY.COM ON LISP HERE.
I DONT SEE ANY PROBLEM AT ALL WITH EAVING
THE CREATE AS (CREATE FOO TEM3←  TEM1←)
SINCE THE FIELD SPECIFICATION ARE OPTIONAL IN CREATE,
IT DOESNT SEEM IMPORTANT TO ME THAT THEY BE ISOMORPHIC
WITH THE ORIGINAL RECORD.

WARREN
Date:  7-OCT-73 1603 From: TEITELMAN

LARRY,

YOUR LATEST RECORD IS ON MY DIRECTORY. ALSO
A NEW LOADUP - LISPX - CORRESPONDING TO ALL THE CHAGES
WE DISCUSSED LAST NIGHT. I HAVENT HAD A CHANCE YET TO
BANG VERY HARD ON RECORD. 
I WOULD LIKE TO TALK TO YOU SOMETIME SOON ABUT DEFAULT,
AND ALSO SOME MORE ABOUT USING. I AM HAVING TROUBLE GETTING
A GOOD MODEL FOR IT (AND HENCE TO EXPLAIN IT). IS
THE FOLLOWING ESSENTIALLY TRUE -

WHEN THE USER CWRITES (CREATE FOO USING ZAP) IT
IS PRESUMED THAT ZAP IS ALSO A FOO (OR ATLEAST CLOSE
ENOUGH SO AS NOT TO MATTER) AND NO CHECKS ARE MADE.
THE CORRESPONDING PORTIONS OF ZZAP ARE USED TO FILL
IN FOO, WITH AS FEW CONSES AS POSSIBLE DONE.
THUS IF FOO IS ((A B C) D)  AND ONE 
DOES (CREATE FOO D←T USING ZAP)  AND
ZAP IS SIMPLYE (X Y), THEN THE NEW FOO WILL
BE (X T), I.E. IF ZAP DOES NOT HAVE THE CORRESPONDING
STRUCTURE, FOO WILL NOT ALSO. THIS IS PRESUMABLY
NOT A FEATURE, BUT SIMPLY A CONSEQUENCE OF THE FACT
THAT ZAP WASNT OF THE RIGHT FORM.
IF THE USER WRITES COPYING INSTEAD OF USING,
YOU WILL TAKE THE CORRESONDING CARS AND CDRS ALL
OF THE WAY.  I WILL CHECK SOME MORE.
DID YOU DECIDE TO IMPLEMENT DEFAUT IN RECORDS
AS SIPLY SPECIFYING ALL DEFAULT FIELDS, OR
TO ALLOW THE USER TO SPECIFY DEFAULTS BY FIELDS?

WARREN
Date:  7-OCT-73 1616 From: TEITELMAN

(CREATE FUM USING FIE)  FFM NOT A RECORD GENERATES
ERROR MESSAGE   NIL NOT A RECORD. SHOULD SAY FUM

(CREATE FOO USING FIE)  CAUSES
U.B.A. IN RECCOMPOSE1 (FROMVAR DEF)

WARREN
Date:  7-OCT-73 1618 From: TEITELMAN

PLEASE BANG ON CLISPIFYING WHEN YOU GET A CHANCE.

ALSO ON ACCESSFNS.

WARREN
Date:  7-OCT-73 1619 From: TEITELMAN

WHEN YOU CALL DWIMIFY1B AND SPECIFYING   USING AND CREATE
AS VARS, PUT THE UPPERCASE VERSION ON FIRST.
THIS IS BECAUSE IN THE EVENT IT IS MISSPELLED,
IT IS MORE LIKELY TO BE FROM TYPEIN, AND HENCE
UPPERCASE. (NOTE THAT USINGG WOULD
CORRECT TO EITHER USING OR using)

WARREN
Date:  7-OCT-73 1619 From: TEITELMAN

PLEASE CHECK OUT THE FILEPACKAGE AND RECORDS AS I DONT PLAN TO.

WARREN
Date:  7-OCT-73 1625 From: TEITELMAN

MAKE SUER WHEN YOU ADD STUFF TO RCORDSPLST YOU
DO IT UNDOABLE, I.E. DO (/RPLACA RECORDSPLST (CONS --))
EXCUSE (/RPLACA (QUOTE RE ORDSPLST)--9
THIS SO IF USERR UNDOES THE RECORD DECLARATION,
THE SPLST WILL REVERT TO ORIGINAL FORM.

THAT TURNS OU TO BE ONE PLACE WHEN NON UNDOABLE STUFF
SNEAKS IN, I.E. THE SETTING (RESETTING) OF
GLOBAL VARIABLES VIA SETQ.

WARREN
Date:  7-OCT-73 1628 From: TEITELMAN

CHECK SPELLING CORRECTION OF LOCAL RECORDS. DOESNT SEEM
TO WORK.
WARREN
Date:  7-OCT-73 2255 From: METCALFE Re:   GUEST
WAS IT YOU LOGGED IN AS GUEST CONNECTED TO YOUR DIRECTORY?
YOU WERE LOGGED IN AT THE SAME TIME (UNDER YOUR OWN NAME).
LOOKED FUNNY, JUST THOUGHT I'D ASK.
/BOB
Date:  8-OCT-73 1810 From: TEITELMAN

WITH REPSECT TO DEFAULTS, I PRFER YOU TO USE ←.
I THINK WRITING SOMTHING LIKE
(RECORD -- DEFAULT (MSG1 0) (MSG2 A))
MAKES IT A LITTLE DIFFICULT TO DWIMIFY, AND
WHAT ABOUT (MSG1 . 0)  ETC. USER
WILL GET CONFUSED.  MAKE HIM WRITE A ← 
EXPRESSION.

WARREN
Date:  8-OCT-73 1813 From: TEITELMAN
RE USING -
I DONT THINK USING AND COPYING IN THE SAME CREATE MAKE SENSE.
(WE TALKED ABUT THIS TDOAY, BUT I AM JUST GETTING YOUR MESAGE),
AND THATUSING AND CPYING SHOULD PRODUCE  RESULTS
THAT ARE ALWAYS EQUAL. (CREATE (RECORD (NIL NIL NIL NIL)) COPYING X)
MEANS (CONS  --) AS YOU INDICATED.

WARREN
Date:  9-OCT-73 1350 From: TEITELMAN Re:   ACCESSFN
YOUR UNDERSTANDING OF ACCESSFN IS ESSENTIALLY CORRECT.
IT WOULD HAVE BEEN ACCEPTABLE HAD YOU SIMPLY
RRETURNED (SETFOO --) THE FIRST TIME I CALLED YOU RATHER
THAN (REPLACE  ACCESSFN --) AND LET ME HANDLE THE
SECONDD CALL, BUT THE WAY YOU HAVE IT
IS BETTER, SINCE I DONT HAVE TO DO ANY CHECKS IN CLISPATOM2.

WARREN
Date:  9-OCT-73 1605 From: TEITELMAN

JUST INTALLED RESPELLING ON VARIABLE NAMES.
WILL BE IN NEXT LOADUP.

WARREN
Date:  9-OCT-73 1611 From: TEITELMAN Re:   CLISPIFYING '

YOU'RE RIGHT. I USED TO HANDLE THAT AS A SPECIAL CASE.
I.E. X←'(MUMBLE). THEN WHEN I  STARTED
WORRYING ABOUTTPARTIAL CLISPIFICATION IN GENERAL,
I PUT IN A PRESCAN AND TOOK OUT THE SPECIAL CHECK.
THEN WHEN I CHANGED THE PRESCAN TO BE MORE EFFICINET
BY HAVING IT ONLY OPERATE WHEN  ONE WAS AUT
TO INSERT AN INFIX OPERATOR, E.G.
YOU WRITE (PRINT X←(IPLUS X )) AND AT THE TIME IT
IS ABOUT TO CONVER THAT TO X+Y IT SCANS THE HIGHERS
PARETN FOR CLISPCHARACTERS, I TOOK OUT THE PRESCAN.
NOW IN THECASE OF (PRINT X←'(CREATE --) IT NEVER
SEES THE '.
ILL FIX IT.

WARREN
Date: 10-OCT-73 1006-PDT From: SRIDHARAN at USC-ISI Re:   DATA STRUCTURE
- - - -
SEEMS TO ME THAT THERE IS MORE TO BE GAINED IF WE REDESIGN THE 
DATA STRUCTURE FOR STORAGE OF GROUPS WITHIN THE STRUCTURES.
THERE IS LITTLE TO BE GAINED IN GOING FROM STRUCTURE-RECORDS TO 
EDGELISTS.
SRIDHARAN
Date: 10-OCT-73 1450 From: TEITELMAN

OK CLISPERROR AS YOU REQUESTED.

WARREN
FROM: SRIDHARAN
LARRY, I NEED YOUR COMMENTS ON WHETHER THE BUG I FIXED IS A LEGITIMATE
BUG OR AM SCREWING UP A CORRECT PROGRAM?
I CHANGED THE ORDER IN WHICH LLABELNODES(+PUTLOOPS) AND LABELEDGES(+
PUTBIVS) ARE ISSUED. PLEASE COMPARE THE NEW VERSION WITH THE OLD VERSION
.  DENNIS WOULD LIKE TO RUN A FEW EXAMPLES.  AND I WOULD LIKE HIM
TO HAVE THIS CORRECTION AS SOON AS POSSIBLE.
SRIDHARAN
Date: 11-OCT-73  240 From: TEITELMAN Re:   CLISPERROR

CALL IT WITH SECOND ARGUMENT T AND IT WILL
DO THE EVQ ON FAULTFN, PARENT, TAIL AND TYPE-IN?,
ALL OF WHICH ARE SPECVARS.

WARREN
Date: 11-OCT-73  300 From: TEITELMAN Re:   BUG IN MATCH

('A $2←FOO $) TRANSLATES TO
(COND ((AND (EQ (CAR X) (QUOTE A)) (EQUAL (CADR X) FOO))
(SETQ $2 (CADR X)) T]

WARREN
Date: 11-OCT-73  301 From: TEITELMAN Re: MATCH

('A $2 $) DOESNT DWIMIFY RIGHT EITHER.
IS IT THAT IT DOESNT RECOGNIZE $2?
IT SHOULD RECOGNIZE $2 AND $3.

WARREN
Date: 11-OCT-73  306 From: TEITELMAN Re:   VARIOUS

(1) WHY DOES THE USE HAVE TO SAY "DEFAULT"? IS IT BECAUSE
YOU ANTICIPATE OTHER STUFF IN THE RECORD DECLARATION ATER?
CAN DEFAULT APPEAR ANYWHERE, 
E.G. (RECORD FOO DEFAULT --  (A B C]

(2) IF THE USER DOES A TYPERECORD  WITHOUT
A NAE FIELD, DO YOU GENERATE AN ERROR.
DO YOU DO SO WHEN HE TRIES TO CREATE  ANINSTANCE?

(3) DOES THE DEFAULT IN THE CASE THAT IT IS TO ONE EXPRESSION
ALSO APPLY TO NIL FIELDS, I.E.
(RECORD FOO (A NIL B) DEFAULT T)
(CREATE FOO) MAKES (T T T)? I PESUME SO.

(4) CAN ONE SPECIFY DEFAULT VALUES FOR PARTICULAR FIELDS
AND A DEFAUT FOR ALL THE REST?
I.E. (RECORD FOO (A B C D E F )  DEFAULT←T  C←..]
OR SOME SUCH? WHAT IS THE SYNTAX ALLOWED?

(5)  DOES COPYING IN CREATE ALSO COPY THE ELEMENT
BEING INSERTED, I.E. IF X IS (A(B C))
AND (RECORD FOO (FIE FUM))
AND I SAY (CREATE FOO  FIE←T COPYING X)
IS (CADR OF THIS EQ TO CADR OF X OR EQUAL?
HOW ABOUT WHEN I USE USING INSTEAD OF COPYING?
I.E. THHRE ARE TWO DIFFERENT WAYS NE CAN TALKE
ABOUT COPYING - ONE IS IN THE CREATION
OF THE STRUCTURE, A LA SUBLI, AND THE OTHER
IN WHAT IS INSERTED. NOTE THAT EVEN WHEN
SUBLIS IS DOING AS FEW CONSES AS POSSIBLE 
THE NEW STUFF IT INSERTS IS COPIED. (I THINK).

WARREN
Date: 27-OCT-73 1822 From: TEITELMAN

AS YOU MAY HAVE ALREADY NOTICED, A NEW LISP IS ∃P. PLEASE SHAKE
IT AS THIS MAY BE IT.

WARREN
Date: 28-OCT-73 1258 From: TEITELMAN
THERE DEFINITIELY IS A BUG IN THE CALL TO RETDWIM2.
HOEVER I DONT SEE HOW IT COULD PRODUCE YOUR SYMPTOMS.
TELL ME WHAT TO DO TO MAKE IT HAPPEN.

RE DWIMIFY1B, ONEFLG MEANS DWIMIFY SO THAT ONLY ONE
EXPRESSION IN THE FINAL FORM IS AFFECTED, IT ALWAYS
GOES THROUGH THE ENTIRE CLUSTER, I.E.
X + Y * Z  GOES TO (IPLUS X (ITIMES Y Z))
AND X * Y + Z GOES TO (IPLUS (ITIMES X Y) Z))
THE IDEA IS THAT THE CALLER WANTS TO THEN TAKE CAR OF TAIL
AND BE SURE THAT IT IS AS IT WOULD BE IF THE ENTIRE TAIL WERE
DWIMIFIED, BUT WITHOUT DWIMIFYING THE ENTIRE TAIL.

WARREN
Date: 29-OCT-73 1211 From: TEITELMAN
THERES NOT SUPPOSED TO BE ANY
DEF FOR CLISP%.

WARREN
Date: 31-OCT-73  258 From: TEITELMAN Re: "NEW FEATURE"
cc:   HARTLEY at BBN

YOUR COMMENT ABOUT (* -- A . B) GIVING UNUSUAL CDR ARGLIST
IS FUNNY. I WOULD NOT HAVE BEEN ABLE TO ACOUNT FOR IT EXCEPT
THAT ALICE MENTIOND TO ME THAT SHE ENCOUNTERED THE PROBLEM
THAT A VERY LONG COMMENT CAUSED A STACK OVERFLOW BECAUSE
OF THE FACT THAT QUOTE HAD BEEN CODED AS A SPREAD FUNCTION
OR SOMETHING LIKE THAT, AND I PRESUME YOUR PROBLEM IS BECAUSE
THE DEFINITION OF QUOTE WAS CHANGED. * IS DEFINED
AS SIMPLY QUOTE. OF COURSE, YOU CAN ALWAYS REDEFINE IT.
IF OTHER PEOPLE NOTICE THIS AND COMPLAIN ABOUT IT, I
WILL FIX IT, BUT I DEFINED * AS QUOTE INITIALLY SIPLY
TO SAVE ON HAVNG ANOTHER COMPILED FUNCTION IN THE SYSTEM.

NOTE IN NEW LISP THAT QUOTE IS REDEFINED AS A 
CFEXPR*, THIS TO BE ABLE TO DETECT WHEN IT IS CALLED WITH
MORE THAN ONE RGUMENT, AS THIS INDICATES PROBABLY
PARENTHESES ERROR.

WARREN

I WENT BACK INTO AN OLD LISP - 7-23-73  AND
IN FACT YOUR (* A B . C) GAVE AN UNUSUAL
CDR ARG LIST THERE ALSO.

WARREN
Date:  1-NOV-73 1315 From: MASINTER Re:   ($@FOO $@FIE $@FUM]
Date:  3-NOV-73 2036 From: TEITELMAN

FIXED YOUR PROBLEMS.

INCICDENTALLY
(COND (T (IGREATERP (SUB1 X) Y)))
DIDNT WORK IN OLD LISP EITHER.

WARREN
Date:  5-NOV-73 2205 From: TEITELMAN Re:   NEW BRKDWN TYPES
cc:   LAMPSON, DEUTSCH, WALKER, JACKSON, BOBROW, RULIFSON,
      MCCREIGHT, TEITELMAN, KAPLAN, THORNDYKE, SAVITZKY

THE NEW LISP HAS A NEW MEASURING FUNCTION BOXCOUNT
WHICH CAN BE USED TO COUNT LARGE INTEGER BOXES
(WITH ARGUMENT NIL) OR FLOATING BOXES
(ANY OTHER ARGUMENT)
COREVALS ARE AVAILABLE. BREAKDOWN NOW HAS TWO NEW
BREAKDOWN TYPES  BOXES AND FBOXES.

WARREN
Date:  6-NOV-73  325 From: TAFT Re:   gripe problem cc:   TAYLOR
The problem with 'general' not being accepted is now fixed.  There is,
of course, still no guarantee that gripes will ever be read.
	Ed
Date:  6-NOV-73  327 From: TAFT Re:   protection of telnet.typescript
You are undoubtedly right, but this sort of thing is much too low on
my list of priorities for me to worry about.  If you think it's
important, Sndmsg to Tomlinson or Burchfiel at BBN.  You probably
won't get much of a response from them either, though.
	Ed
Date:  7-NOV-73  310 From: MASINTER Re:   NOFVRINGS(6 0 2) at P=2
Date:  7-NOV-73 1325 From: TAFT Re:   gripes
I agree a better gripe mechanism is needed.  I have put it on my
list of things to think about.
	Ed
Date:  8-NOV-73 0316-EST From: LEWIS at BBN-TENEX Re:   PART 2
THE CURRENT STATE OF DOCUMENTATION FOR USER DATA TYPES IS PRETTY SKETCHY.
THE NEW SUBRS THAT HAVE BEEN ADDED TO LISP ARE DESCRIBED IN
<BOBROW>STRUCSUBRS.RNO (A RUNOFF FILE).  THIS, OF COURSE, DOESN'T BEGIN
TO DESCRIBE HOW THE USER IS REALLY SUPPOSE TO USE IT.  THERE IS A PACKAGE
WRITTEN IN LISP WHICH DOES ALL OF THE REAL WORK FOR THE USER. YOU
CAN FIND THE SOURCE ON <BOBROW>STRUC, AND ITS PROBABLY
ALSO ON YOU LOCAL LISP OR NEWLISP DIRECTORY.  I HAVEN'T EVEN STARTED
TO DOCUMENT IT YET BECAUSE IT MIGHT BE TOTALY REWRITTEN AT
ANY TIME.

THE SUBRS ARE IN A PRETTY SOLID FORM AND I DON'T EXPECT TO MAKE IN
MAJOR CHANGES EXECPT THAT TYPESTATUS MIGHT GO AWAY SOMEDAY.
YOUR WELCOME TO PLAY WITH IT BUT IT PROBABLY WON'TBE VERY
USEFUL UNTIL I DOCUMENT THE LISP CODE.
DARYLE
Date:  8-NOV-73 0303-EST From: LEWIS at BBN-TENEX
(1) WE DO HAVE AN IMLAC ASSEMBLER AND LOAD ROUTINE. BUT I'M NOT
SURE HOW MUCH HELP THEY WILL BE.

THE ASSEMBLER IS ON <IMLAC>IMACRO.SAV, THE SOURCES ARE ON
<MERRIAM>IMDEF.MAC,IMACS.MAC.

TO USE IT PUT A "SEARCH IMDEF,IMACS" IN FRONT
OF YOUR MACRO FILE.

TO LOAD INTO THE IMLAC, ENTER LOADER AND TYPE FOO,IMLOAD(ESC),
WHERE FOO IS THE REL FILE FROM THE ASSEMBLY.

THE PROBLEM HERE IS THAT YOU NEED A THING CALLED TSIM IN THE IMLAC.
TSIM IS A RESIDENT IMLAC PROGRAM WHICH HANDLES THE TTY IO,
CONTAINS A DEBUGING PACKAGE, AND CALLS USER PROGRAMS.

DOCUMENTATION FOR TSIM (AND FOR OUR IMLAC IN GENERAL) IS ON
<IMLAC>USERSGUIDE.DOC.  TSIM IS ALSO FOUND ON <IMLAC>.
THE BOOTSTRAP FOR TSIM IS ON <IMLAC>IMBFL.

I HOPE YOU HAVE A BIG IMLAC, TSIM TAKES 4K.

IF ALL OF THIS IS TOO MUCH FOR YOU, LET ME KNOW, I THINK I CAN
LAY MY HANDS ON A SETUP FOR A SMALLER MACHINE IF IT IS
NECESSARY.

DARYLE
Date:  8-NOV-73  813 From: TEITELMAN
cc:   LAMPSON, DEUTSCH, WALKER, JACKSON, BOBROW, RULIFSON,
      MCCREIGHT, TEITELMAN, KAPLAN, THORNDYKE, SAVITZKY
- - - -

THERE IS YET ANOTHER NEW LISP IN OPERATION.
A FEW BUGS HAVE BEEN FIXED. ALSO, THIS NEW LISP
HAS THE FOLLOWING NEW FEATURE:

THE FILEDATE PROPERTY IS UPDATED BY MAKEFILE TO
INCLUDE BOTH THE ORIGINAL DATE OF THE FILE 
THAT WAS LOADED, PLUS THE DATE OF THE LAST MAKEFILE,
PLUS THE NAMES OF AAYTHING CHANGED SINCE THE FIRST
FILE WAS LOADED. THE FILECREATED EXPRESSION IN THE
FILE ALSO CONTAINS INFORMATION REGARDING CHANGES,
AS WELL AS THE ORIGINAL DATE (BUT THIS
IS NOT PRINTED OUT WHEN LOADED).

THUS IF YOU LOAD THE FILE FOO, EDIT FIE AND FUM, DO A MAKEFILE,
THEN EDIT FOO1, AND DO ANOTHER MAKEFILE,
THE FILLDATE PROPERTY WILL BE (original-date date-of-last-makefile FOO1 FIE FUM)
AND THE FILECREATED EXPRESSION WILL SAY
changes to: FOO,FIE,FUM
previous date: AND GIVE THE FIRST DATE.

THE INTENT WAS TWOFOLD. FIRST, AFTER A MAKEFILE IT IS DIFFICULT
TO TELL WHAT YOUCHANGED, EVEN WHILE STILL IN THE SYSTEM
FROM WHICH THE MAKEFILE WAS PERFORMED. ALSO FOLLOWING A SYSOUT-SYSIN,
ONE CANT EASILY TEEL WHETHER A PARTICULAR FILE WAS MADE FROM
THAT SYSTEM. FINALLY, NOW YOU CAN LOOK AT YOUR LISTING
AND KNOW  WHICH THINGS HAVE BEEN CHANGED.
Date:  8-NOV-73 2049 From: JACKSON Re:   MATCH BUG?
Larry,

Using <NEWLISP>MATCH.COM;4, (S: ($1 $@FOO $@FIE)) dwimifies
correctly, but (S: ($1 $@FOO $@FIE 'A)) and (S: ($1 $@FOO $@FIE $1))
both give a SOME with null terminator.

Phil
Date:  9-NOV-73 1415 From: JACKSON
Larry,

If S is a list of 5 atoms, then

(S: ($1 $1@ATOM $1@ATOM $1@ATOM $1@ATOM))

does not match, because the translation requires (EQLENGTH S 4).
This also happens for longer patterns: e.g., if the pattern is
$1 followed by 9 $1@ATOM's, the translation will require 
(EQLENGTH S 8).

Phil
WARREN:
I AM WORKING ON THE RECORD STUFF ;  AS YOU GUESSED , THERE ARE SOME 
PROBLEMS WITH CLISPIFYCATION...
LET'S GET TOGETHER MONDAY TO TALK ABOUT IT.

MEANWHILE...

IN SUBSYS, THERE IS A CHECK FOR (AND FIXP FILE/FORK  (EQ FILE/FORK
   (ELTD USERFORKS ....)]

SURE TOOK ME A LONG TIME TO FIGURE OUT THAT I COULDNT JUST
SAY (SUBSYS 131074)... 

THEERE IS A COPY OF MAC ON MY DIR WITH THE EQ CHANGED TO AN EQP.
			LARRY
WARREN:
PUT(STANDARD CLISPCLASS (ACCESS . 1]
WARREN:
<TEIεLISPY

CLISPDEC(UNDOABLE]
CLISPIFY((/RPLACD X (QUOTE FOO]
(POSSIBLE) PARENTHESIS ERROR IN
(/RPLACD X (QUOTE FOO))
AT "... /RPLACD X (QUOTE FOO))"
(OR ELSE, THE "MISSING OPERATOR" MESSAGE)
		LARRY
WARREN:
IN CLISPLOOKUP1, ALLOW A RECORD DECLARATION OF THE FORM
(TYPERECORD ....) AS WELL AS ONE OF THE FORM (RECORD ...)
WARREN:
IT WAS IN ONE OF YOUR WORK FILES, AND POSSIBLY WAS SOMETING THAT YOU
WERE IN THE MIDDLE OF WORKING ON; I SUPPOSE I SHOULD BE MORE CAREFUL.
THE ONLY THING THAT I CAN SEE AROUND THAT IS LIKE IT LOOKS OK TO
ME NOW (WHAT I RECALL WAS A FUNCTION THAT JUST CHECKED
  (SUBRP, (MEMB NLAMA'S), (MEMB NLAMLS), BUT THE ONLYTHING THAT DOES THAT
IS DWIMIFY1, AND THE CODE THERE IS FINE.  
MY APOLOGIES.  
("WOLF! WOLF!" HE CRIED)
u.d.f.
"WOLF! WOLF!"
WARREN:
RE OUR CONVERSATION THIS AFTERNOON:

I HAVE PUT BACK THE /PUTS

2) THE RECORD FIELDS AS WELL AS THE /SET.FIELD AND SET.FIELD ETC
GO ONTO RECORDSPLIST (I INITIALIZE RECORDSPLIST TO (NIL)) AND THEN
JUST CALL (ADDSPELL WORD RECORDSPLIST).

3) I PUT INTO THE (CREATE FOO A←'B B←'C) THING A CLISPLOOKUP ON
FOO; THIS WILL WORK IF, IN CLISPLOOKUP0, YOU DO THE
(MEMB WORD (RECORDECL recorddeclaration]

4) I DON'T QUITE UNDERSTAND WHAT YOU WANT ME TO DO IN CLISPRECORD
IF YOU GIVE ME A T AS THE RECORD DECLARATION.  DO YOU WANT ME
TO PUTHASH? OR CAN I /RPLNODE? GIVE ME AN EXAMPLE OF A SITUATION
WHERE THIS WILL OCCUR.


EXCEPT FOR 4 ABOVE, EVERYTHING IS DONE; I AM COMPILEING NOW AND WILL
HAVE A NEW RECORD AND RECORD.COM ON <LISP> SHORTLY.


			LARRY
WARREN:
I GUESS THE (FUNCTION (LAMBDA ---] THING FOR BLOCKS HASN'T BEEN FIXED;
OR, I GOT A U.D.F. RETDWIM2; IT WAS IN CLISPATOM1. LOOKING AT THE
CODE, THERE IS A (FUNCTION (LAMBDA(X Y)(CONCAT .. (COND (T (RETDWOM2 ..]
HOWEVER, DWIMBLOCKA0003 ISN'T IN DWIMBLOCK, SO RETDWIM2 ISN'T DEFINED.
(YOU'RE CALLING CLISPFUNCTION? ]
WARREN:
A TYPERECORD IS A RECORD WITH A TYPE MARKER IN THE CAR, WHICH
SAYS WHAT KIND OF RECORD IT IS. 
SAYING (TYPERECORD FOO (FIE . FUM] IS LIKE SAYING
(RECORD FOO (FOOID FIE . FUM], EXCEPT THAT (CREATE FOO FIE←'X) STICKS
IN AN IMPLICIT FOOID←'FOO; AND ALSO, A FUNCTION FOO? IS DEFINED
WHICH MEANS (EQ (CAR X) 'FOO).  

CLISPLOOKUP SHOULD RETURN IF DECL:1='RECORD OR DECL:1='TYPERECORD,
WHEN CLASS='RECORD.

DWIMIFY((IF A THEN B ELSIEF C THEN D]
=ELSEIF
(IF A THEN B ELSIEF C THEN D]

OR WORSE STILL, WHEN EXECUTING AND APPROVING, U.D.F. IF.
A,B,C,D BEING SET DOESN'T HELP. 
DID I REALLY??! ASK FOR IT?
OH WELL.

THINGS LOOK REASONABLY UNDER CONTROL & I WILL LET YOU KNOW WHEN
I HAVE A VERSION YOU CAN PLAY WITH.

			LARRY
--------
I GOT A U.D.F {IN HELPFIX1}: (MOVETOP (CAR X) SPELLINGS2)
--------
WARREN:
1) FILEPACKAGE WORKS FINE.. I JUST NEEDED
THE PRETTYTYPE PROP.

2) RECORD(NAME FIELDS) TYPERECORD(NAME FIELDS)

3) HAS ALWAYS WORKED THAT WAY.

4) YEP

5) YEP

6) WORKING ON IT

7) RECORD AND TYPERECORD ARE FUNCTIONS FOR GLOBAL DECLARATIONS.
  THE PRETTYMACRO (RECORDS ....)  PRINTS OUT A CALL TO RECORD.
  YES, RECORD IS AN INITIALIZATION FUNCTION FOR A PACKAGE AND
  MUST BE DONE BEFORE ANY COMPILATION IS DONE.

8) HMMM. I LIKE THE IDEA, KIND OF.... I MEAN, WHEN YOU DWIMIFY
  X:FOO AND GET (FOO X)  THAT IS MNEUMONIC; EVEN (REPLACE.FOO X ...)
AND YOU CAN TELL WHAT IS GOING ON; BUT , WELL , 
(MAKE.FOO ... ... ...) AND THE FIELD NAMES HAVE TO DISAPPEAR
(AND I DON'T WANT TO MAKE IT A NLAMBDA WHICH IGNORES
SOME OF IT'S ARGUMENTS , AS IN
 (MAKE.FOO X← X1PART Y← Y1PART ] BECAUSE 
(1) DWIMIFY, CLISPIFY WILL GO APESHIT. (CAN BE FIXED, THOUGH)
(2) USER MIGHT STICK THINGS INTO IT....

IF A RECORD IS REDECLARED, HOWABOUT MAPHASHING CLISPARRAY.
I REMEMBER PROPOSING THIS BEFORE AND YOU'RE NOT LIKING IT, BUT
I DON'T REMEMBER WHY.

9) I WASN'T BUT WILL USE SOMETHING LIKE REPLACE.FOO AND FETCH.FOO FOR
THE GENERATED ACCESS FUNCTIONS.... AND SO YES, IT IS NO LONGER
NECC THAT THE FIELD NAMES BE DIFFERENT FROM FUNCITION NAMES....
(BUT J.R.USER BETTER NOT HAVE A FUNCTION CALLED "REPLACE.FOO")...


---------------------------------------

NOW:
1) DO YOU WANT ME TO CHECK FOR ACCESSFN? I.E. IS PETER STILL USING
IT?

2) I DO ALL OF MY LOOKING UP INTERNALLY AS IT WAS NICE TO SAVE THINGS
LIKE (WERE THERE ANY RECORD DECLARATIONS) ETC. 
JUST BE WARNED THAT IF YOU CHANGE DECLARATIONS DRASTICALLY I DON'T
GO THRU CLISPLOOKUP.

3) THE IDEA THAT I HAD FOR TYPERECORDS WAS THE ABILITY TO SAY
  (RECORD MUMBLE (A B . C)) (RECORD FUMBLE (D E . F)) 
AND THEN BE ABLE TO TEST WHETHER A THING WAS A MUMBLE OR A FUMBLE.
(YOU GET TIRED OF FOO AFTER A WHILE).
WHAT THIS MEANT WAS JUST CONSING ONTO THE BEGINNING OF THE THING
THE "NAME" OF THE RECORD TYPE, AND THEN BEING ABLE TO CHECK.

THE GLOBAL IMPLEMENTATION IS TO DEFINE A FUNCTION CALLED
"MUMBLE?" I.E.

    (IF MUMBLE? X THEN X:A ELSEIF FUMBLE? X THEN X:D]...

ESSENTIALLY ONE IS EXTENDING THE DATA TYPES OF THE LANGUAGE
(AT LEAST CONCEPTIALLY) WITH AN ANALOGY FOR LISTP, ARRAYP, ETC.

THIS WORKS FINE FOR GLOBAL RECORDS; I CAN JUST DEFINE THE FUNCTION
"MUMBLE?".... HOWEVER I'M NOT SURE HOW I CAN GET HOLD
OF IT FOR LOCAL RECORDS, OR WHAT TO CAAL IT...
(IF (TYPEOF X IS MUMBLE) .....)?  


4) I HAVEN'T LOOKED AT CLISPIFICATION AGAIN, BUT SOMETHING TELLS ME
THAT IT ISN'T WORKING... WILL CHECK IT OUT.



AS YOU CAN SEE, THINGS ARE NOT COMPLETELY FIRM... 

BACK TO WORK.



			LARRY
MORE:

5) IT SEEMS THE VALUE I AM RETURNING FROM CLISPRECORD IS BEING
EMBEDDED IN AN EXTRA SET OF PARENTHESES...

6) IN THE SECOND CALL IN THE REPLACE SCASE  (I.E. X=(REPLACE ...)
AND FLG=T, WHAT IS IT THAT YOU ARE GIVING ME AS FIELD ... IT SAYS
PARENT IN THE CALL... CAN I ASSUME THAT THE REST IS WHAT IS SUPPOSED
TO BE REPLACED IN.   THAT IS....
 IN X:FOO←FIE, WHERE AM I SUPPOSED TO PICK UP THE FIE.... I'VE CURRENTLY
DONE IT WITH (CDDR (FMEMB X FIELD)), BUT I DON'T THINK THAT IS RIGHT..
#

DOING A LOOKAT, I GET A U.D.F DWIMIFYMACRO.... THIS IS IN
<TEITELMAN>LISPY, THE LASTEST ONE... THIS IS PROBABLY
BECAUSE WARREN IS NO LONGER USING DWIMIFYMACRO.... WOULD YOU CHECK
IT OUT? (I'M LOOKING AT FUNCTIONS WITH FORS WHICH HAVEN'T BEEN
RUN/DWIMIFIED YET).

			LARRY
PHIL:
WHAT IF I HAD A VARIABLE CALLED FNMOD....?????

I DON'T LIKE ALL OF THOSE GC 30'S GENERATED; IF YOU MUST CREATE
NEW ATOMS , I THINK (PACK (LIST ....)) IS BETTER THAN 
(MKATOM (CONCAT ....]  I.E. DOING CONSES IS BAD, BUT GENERATING
STRINGS IN STRING SPACE AND THEN COPYING THEM TO PNAME SPACE
IS WORSE (I BELIEVE...) BEST WAY IS X←'(NIL NIL)   
X:1←FOO X:2←FIE (PACK X) 

IS THE MEMO ON FILE ANYWHERE?
I HAVE COPIED RECORD & LARRY.SYS TO MY DIR AND YOU CAN DELETE THEM..
TODAY WAS WASTED.. I'LL GET BACK ON IT TOMORROW (MAXC DOWN AND
I'M OUT).  IT'S AN AWFULLY LONG TUNNEL.

			LARRY
WARREN:.
WOULD LIKE THE FOLLOWING HANDLE TO PLAY WITH: 
  IF (GETP (CAR FORM) 'CLISPWORD):1='USERWORD THEN CALL
  CLISPUSERFN ON FORM

  AND IN CLISPIFY, CALL CLISPIFYUSERFN.

I WANT TO LOOK AT THE WAYS OF IMPLEMENTING "GENERATING" FUNCTIONS
I.E. TAKE (FOREACH X←(PARTITION Y) DO (IF VALID X THEN PRINT X]
ONE IMPLEMENTATION WOULD BE TO HAVE PARTITION CREATE A LIST , AND
THEN (MAPC (PARTITION Y) (F/L(IF VALID X THEN PRINT X]
HOWEVER, IN MY APPLICATION, THE LIST STRUCTURES CREATED
BY THE ABOVE ARE LARGE, AND ALSO, I WOULD LIKE TO DO THE VALID\
CHECK AS THE THINGS ARE GENERATED, RATHER THAN WAITING FOR THEM
ALL TO BE GENERATED.  THE SYNTAX IN PARTITION WOULD BE SOMETHING LIKE
(LAMBDA ... (GENERATE .... LP  ... (USE FOO) ... ]. 
THE MEANING BEING THAT IF YOU WERE INSIDE A FOREACH, THEN THE "USE"
WOULD GO TO THE "DO" PART; AND IF NOT INSIDE A "FOREACH" , THE "USE"
WOULD JUST ADD THE VALUE TO $$VAL, WHICH "GENERATE" WOULD RETURN.

IT SEEMS LIKE A FLEXIBLE SCHEMA FOR CHANGEING A BREADTH-FIRST TREE SEARCH
INTO A DEPTH FIRST ONE... AND IF I DO THE IMPLEMENTATION USING
THE CLISP STUFF, I CAN TRY VARIOUS CONFIGURATIONS WITHOUT HAVING
TO CHANGE THE CODE.... THIS MIGHT BE AMENABLE TO THE USE OF SPAGHETTI
STACKS, WHEN THEY ARRIVE, AS WELL.

LONG WINDED REQUEST; BUT I THINK THAT THIS MIGHT BE USEFUL FOR OTHERS
AS WELL AS FOR ME & IT SEEMS THAT IT DOESN'T INVOLVE MUCH OVERHEAD
FOR YOU.
				LARRY
WARREN:
I LOOKED AT CLISPLOOKUP1 WHERE YOU CHECK FOR CLASS = RECORD & 
NOTICED THAT YOU INDEED CHECKED WHETHER (CADR FORM) WAS = TO
THE RECORD NAME, RATHER THAN (CADR (RECORDECL FORM] AS I
HAD PREVIOUSLY STATED. BUT YOU'RE RIGHT! AND I CAN USE THAT
PLACE FOR STORING THE DWIM'ED DEFAULTS;  SO GOOD, LEAVE IT.

BUT HOW DID YOU KNOW?

			LARRY
WARREN:
DEFAULTS ARE NOW IMPLEMENTED: USER SAYS
(RECORD FOO (A B (C . D)) DEFAULT C←'X D←0]
OR JUST ... DEFAULT←...] OR 
JUST (RECORD ... DEFAULT 'X]

HOWEVER, I DIDN'T WANT TO BOTHER WITH PUTTING IT IN THE CREATE:
I.E. (CREATE FOO DEFAULT T) IS NO LONGER SUPPORTED.
(TAKE CLISPWORD PROP OFF DEFAULT(?)).

THERE IS A NEW RECORD AND RECORD.COM ON MY DIR HERE AND ON
YOUR DIR AT BBN. AND, LIKEWISE, HAVING DIDDLED THE CODE, I MIGHT
HAVE INTRODUCED SOME NEW BUGS; I'M TESTING NOW. 

			LARRY
SRIDHARAN:
AS I RECALL, THE ORDER OF LLABELNODES AND LABELEDGES IS OPTIONALL.
HOWEVER, ALSO AS I RECALL, IT IS VERY IMPORTANT:
BOTH LLABELNODES, AND LLABELEDGES

ARE DONE BEFORE BOTH PUTLOOPS, AND PUTBIVS ARE DONE.

I.E. YOU COULD DO
(FOR X IN LLABELNODES FOR Y IN LLABELEDGES ...)
OR VICE VERSA, AND THE
... COULD BE EITHER
(PUTLOOPS (PUTBIVES ...)) OR (PUTBIVS (PUTLOOPS ...]

NICHT WAHR?

I'LL LOOK AT YOUR STUFF RIGHT AWAY.

			LARRY
WARREN:
I JUSTCHECKED CLISPERROR AGAIN, AND IT LOOKS LIKE TYPE-IN? IS
A LOCALFREE AS WELL. HMM.
(IF FN}='TYPE-IN AND TYPE-IN? = NIL THEN (FIXPRINTIN (OR FN FAULTFN ...]

THIS LOCALFREE BUSINESS IS TROUBLESOME...

			LARRY
WARREN:
JUST FIXED AN INTERESTING ONE:

IF THE GUY SAYS

(RECORD FOO (FIE . TEM) DEFAULT FIE←X:FIE]

THERE IS A PROBLEM: IF I PUT THE TRANSLATION
AFTER DWIMIFYING, THEN THE X:FIE WOULD GET AN ERROR IN
THE DWIMIFYING....
(OR WORSE, THERE WOULD BE INFINITE RECURSION LOOKING UP THE
DECLARATION)

ALTERNATIVELY, IF I DWIMIFYED AFTERWARDS, IF AN ERROR
OCCURED IN THE DWIMIFICATION, I NEEDED A WAY OF SAYING
THAT THIS RECORD HAS BEEN MASSAGED, EXCEPT FOR THE
DEFAULTS, WHICH HAVEN'T BEEN DWIMED.....

ONE MORE CRACK FILLED... I WONDER HOW MANY MORE THERE ARE.

"THERE IS NO SUUCH THING AS A DEBUGGED PROGRAM"

			LARRY
WARREN:
IN DWIMIFYING THE "DEFAULT" PORTION IN A GLOBAL RECORD
DECLARATION, I CALL DWIMIFY1B; HOWEVER, IN SOME CASES I GET
A "ILLEGAL STACK ARG" .  WOULD YOU KNOW WHICH THINGS I NEED TO
BIND IN ORDER TO DO IT RIGHT? 

			LARRY
WARREN:
1) THE USER DOES NOT HAVE TO SAY DEFAULT, IN FACT.
IN FACT, IT WAS HARD DOING THAT HE HAD TO SAY DEFAULT.
HOWEVER, IT IS OK IF HE DOES SAY DEFAULT. THE CASES ARE:
(RECORD FOO (FIE . FUM) DEFAULT FIE←T]
(RECORD FOO (FIE . FUM) DEFAULT T]
(RECORD FOO (FIE . FUM) DEFAULT←T FIE←T]
(RECORD FOO (FIE . FUM)  FIE←<'A 'B> FUM← X + Y]

ALL OF THE ABOVE WORK; I THINK THE BEST THING IS TO TAKE 
AN "INTUITIVE" SUBSET, AND LEAVE THE REST UNDOCUMENTED.

2) A TYPERECORD WITHOUT A NAME FIELD IS AN ERROR.
THE ERROR IS GENERATED BY RECORDECL, WHICH IS CALLED
ON GLOBAL RECORDS AT THE TIME OF THE CALL TO RECORD
OR TYPERECORD; AND ON LOCAL RECORDS AT THE TIME OF THE LOOKUP.

IT IS POSSIBLY UNFORTUNATE THAT IN
(CLISP: (TYPERECORD (FIE . FUM)) (RECORD (FOO . FEE]
THAT THE ERROR WILL OCCUR AT X:FOO; BUT IT IS MINOR
AND HARD TO CHANGE.

3) THE DEFAULT IF THERE IS A "UNIVERSAL" DEFAULT, APPLIES TO ALL FIELDS,
EVEN NIL ONES, AND, WARNING: EVEN TO CDR NIL ONES.

(RECORD FOO (A NIL B) DEFAULT T)
(CREATE FOO) MAKES (T T T . T).  YES, I KNOW THAT IT MIGHT BE 
NON INTUATIVE; BUT I'M NOT SURE I WANT TO CHANGE IT. RIGHT
NOW, I DO THINGS IN A NICE SIMPLE RECURSIVE WAY THAT I DON'T DISTINGUISH
CAR FIELDS FROM CDR FIELDS...


4) YES. ONE CAN SAY (RECORD FOO (A B C D E F) DEFAULT←T C←...]

5)  COPYING DOES NOT COPY THE INSERTED ELEMENT.. IT COPIES
DOWN TO THE CORRESPONDING ATOMS IN THE RECOR
DECLARATION. THE THING IS THAT WHEN SUBLIS IS INSERTING NEW STUFF,
IT IS INSERTING THE SAME! STUFF IN EVERY POCKET.. HERE
IN ONE POCKET GOES (CAR X) AND IN ANOTHER GOES (CADR X)...
SO THAT IN GENERAL, COPYING WILL NOT! CREATE RE-ENTRANT LIST
STRUCTURE.

I JUST REMEMBERED... THE CASE  DEFAULT X←Y (OR 
WAS HARD TO DISTINGUISH FROM THE CASE
DEFAULT FIELD←> I.E. AN ERROR.  I WOULD SAY THAT THE OPTIONS
SHOULD BE:
(RECORD FOO (FIE . FUM) FIE←T]
(RECORD FOO (FIE . FUM) DEFAULT FIE←T]
(RECORD FOO (FIE . FUM) DEFAULT←T { FIE ← X FUM ← X} ).

I.E. DEFAULT IS EITHER A DUMMY WORD, OR DEFAULT←T.....
I KNOW THAT WE DISCUSSED THIS INSTANCE BEFORE; IT ESSENTIALLY
MEANS THAT IF YOU HAVE A FIELD NAME CALLED "DEFAULT" THAT YOU
CANNONT SPECIFY A LOCAL DEFAULT FOR IT. I'M NOT WORRIED. ARE YOU?

NEW RECORD AND RECORD.COM ON NEWLISP.
WARREN:
HAVE EXPERIENCED A PROBLEM WITH CLISPERROR MESSAGES GIVING A
"NON-NUMERIC ARG" AFTER TYPEING "POSSIBLE PARENTHESIS ERROR..."

I TRACKED IT DOWN: THE PROBLEM IS THAT THE ARGUMENTS YOU
GIVE TO RETDWIM2 FROM RETDWIM ARE IN THE WRONG ORDER; 
YOU CALL (RETDWIM2 X 2 TAIL). BUT RETDWIM2 TAKES (X TAIL N M)

				LARRY
WARREN:
WHY DOES DWIMIFY1B ON
(X:1 OR FOO)  GOBBLE UP THE "OR" AND THE "FOO" EVEN WHEN
ONEFLG IS ON.  I THOUGHT THAT ONEFLG MEANT TO ONLY EAT AS MUCH
AS THE FIRST ATOM DICTATED WAS NECCESARY;
AND THUS DWIMIFY1B((X*  Y ) ] WITH ONEFLG WOULD GET (ITIMES X Y]
BUT DWIMIFY1B((X * Y] WOULDN'T.

I HAVEN'T TRIED IT OUT WITH THE "*" ACTUALLY, BUT I GOT THE
ABOVE BEHAVIOR WITH "OR". 

			LARRY
NO DEF FOR CLISP%  .
        Larry
WARREN:
YOU CAN DELETE THE OLD LISP*.SAV FILES IF YOU LIKE- I'VE COPIED
THE ONES THAT I NEED TO MY DIRECTORY.


			LARRY
WARREN:
I KEPT ON GETTING A "UNUSUAL CDR ARG LIST" ERROR MESSAGE, AND COULDN'T
FIGURE IT OUT, UNTIL I LOOKED AT THE FUNCTION AND SAW THAT IT HAD A
COMMENT THAT ENDED WITH 
   (* -- A . B]
THIS DIDN'T USE TO HAPPEN.
			LARRY
WARREN:
I REALLY WOULD LIKE TO HAVE A STKAPPLY*; I HAVE NO GOOD WAY OF
IMPLEMENTING IT RIGHT NOW EXCEPT FOR KLUDGING UP A CALL
TO STKEVAL & WOULD LIKE TO AVOID ALL OF THOSE CONSES. COULD
YOU PASS THIS REQUEST ON TO THE APPROPRIATE PERSON? THANKS

			LARRY

WARREN:
CLISPIFY((COND(T (IGREATERP (SUB1 X) Y]
->
(if T then X-1GT Y]

i.e. packs in the GT

		Larry
WARREN:
I FINALLY FOUND A GOOD, EASY TO REPRODUCE EXAMPLE:
DWIMIFY((IGREATERP (SUB1 X) CAR]
(possible) parentheses error in

NON-NUMERIC ARG
(CAR)
in RETDWIM3

(broken)
ED TAFT:
I AGREE THAT SUCH STUFF IS VERY LOW LEVEL, AND NOT WORTH
WORRYING ABOUT; BUT I SUPPOSE MY POINT IS THAT, SUCH
STUFF DOES NEED TO BE REPORTED AND COMPLAINED ABOUT; AND
I HAD NO IDEA TO WHOM TO REPORT IT.... IT WOULD BE NICE
FOR EXAMPLE IF GRIPE KNEW TO WHOM TO SEND A MESSAGE
WITH A GRIPE ABOUT A SPECIFIC SUBSYSTEM; I EXPERIENCE
THOSE KINDS OF LOW LEVEL PROBLEMS VERY OFTEN; MOST
OF THE TIME I JUST GET AROUND THEM; BUT IF A BETTER GRIPE
MACHINERY WERE AVAILABLE, FIXES COULD POSSIBLY BE INCORPERATED
WITH LITTLE DIFFICULTY, SAY, AT A NEW RELEASE.

IS ANYBODY LISTENING OUT THERE?

AGAIN, PERHAPS YOU ARE NOT THE APPROPRIATE RECIPIANT
OF THIS MESSAGE/COMPLAINT; BUT THEN, WHO IS?

			LARRY
WARREN:
I LIKE THE NEW PROMPT FOR {IN ...} IS FOO TO BE TREATED AS A FUNCTION
THING; HOWEVER:
DWIMIFY((IF X=NIL THEN X←'FOO Y←'TEM ELSE Y←'FOO]
TRIES TO CORRECT IT TO ←←(FOO Y←'TEM] IF FOO IS A FUNCTION.

			LARRY
PHIL:
I'll get on your two problems right away-- the $1@atom thing is
easy to fix, I imagine; but the $@fn $@fn 'a) might be hard
and take me a while; will let you know.
DENDRALERS:
THERE IS A COPY OF THE NEW STRUCTURE GENERATOR AT BBN IN THE
<S-DENDRAL> DIRECTORY. ALSO THERE IS THE CATALOG.DICTIONARY
(CATALOG ENTRIES ARE NOT STORED IN CORE), AND THE DRAW PROGRAM...
THE FILE IS STRGEN.SAV; AND IT IS A MAKESYS FILE, SO THAT
IT IS ONLY NECCESARY TO SAY "STRGEN" TO THE EXEC TO GET
THE STRUCTURE GENERATOR....

UNTIL I CAN FIX UP THE DRAW PROGRAM, IT IS NECCESARY TO
SAY "READVISE((SUBSYS IN DRAW))" BEFORE TRYING TO DRAW
ANY STRUCTURES.

THE EXTERNAL CHANGES TO THE WORKINGS ARE MINOR; YOU
MIGHT NOTE THAT NO FUNCTIONS ARE INITIALLY "TURNED OFF"
AND SO IF YOU WANT TO DO "EXPANDS" ONE LEVEL AT A TIME
YOU MUST EXPLICITLY SAY:
  TURNOFF((RINGS NOFVRINGS NOLOOPEDRINGS CATALOG SINGLERINGS
           DAISIES ]

THE ADVISE TO "CHECK FOR STRUCFORM IN" ... HAS
BEEN COMPILED INTO THE FUNCTIONS THAT NEED TO, SO THE
RESPONSE TO THAT QUESTION SHOULD BE "NO" IN ALL NORMAL
CASES.

I WILL BE WORKING ON DOCUMENTATION OF CHANGES AND FEATURES
AND WILL LET YOU KNOW ITS WHEREABOUTS WHEN I GET DONE.

			LARRY
WARREN:
(this portion of the message has been deleted for security reasons)
 BEEN DUMPED AND RELOADED, THERE IS NO LOCAL DEC, AND THUS IT
DOESN'T GET DWIMIFIED, AND THUS DOESN'T GET CLISPTRAN'ED.

IF THIS MEANS PUTTING A CLISPWORD ON REPLACE AND FETCH (I THINK
THAT WILL DO IT) IT'S FINE WITH ME.

			LARRY
WARREN:
JUST AS A FUNNY NOTE: OTHERWISE, A COMPILED CALL TO REPLACE IS
ERROR CORRECTED TO AN EDITCOMMAND!. (I DON'T QUITE UNDERSTAND THIS).
I HAD A FN CALLED "MONITOR" ... "MONITOR" CALLED "ADDBUFFER" AND
"ADDBUFFER" HAD A (REPLACE ....) IN IT (LOWERCASE). THUS:
MONITOR(2 2)
=REPLACE
= XXX     <---- LASTWORD
EDIT
*
 REPLACE?
*


OH WELL.  (THIS WAS ALL IN <TEITELMAN>LISPX, BUT I LOOKED IN WORK
AND COMPILEUSERFN IS THE SAME THERE).

				LARRY
WARREN:
I THINK I GOT DFNFLG MIXED UP WITH SOMETHING ELSE... IS THERE SOME
WAY OF TELLING WHETHER OR NOT SOMETHING IS BEING EXECUTED INSIDE
A LOAD? I'VE BEEN DUMPING OUT RECORDS BY JUST DOING A 
(P (RECORD .....)) ESSENTIALLY.... HOWEVER, WHEN RECORD GETS
CALLED DURING THE LOAD, IT ADDS THE THING TO CHANGEDRECLST,
RESULTING IN THE FILES LOOKING AS IF THEY NEED TO BE DUMPED.

I SUPPOSE I COULD LOOK UP THE STACK FOR LOAD, BUT SOMETHING
TELLS ME THAT THERE IS A FLAG WHICH LOAD SETS (OR HOW DOES
DEFINEQ KNOW, OR DOES LOAD LOOK FOR DEFINEQ'S)? 

				LARRY
WARREN:
WAS AN ITERNAL CONSISTANCY CHECK FOR WHAT I THOUGHT WAS AN IMPOSSIBLE
SITUATION... I'LL LOOK INTO IT.
WHEREIS(FOO) WHERE FOO IS A USERMACRO DOESN'T WORK.... I DON'T
KNOW IF IT SHOULD HAVE (I.E. IF THIS IS A BUG, OR A NON-FEATURE).

				LARRY
WARREN:
    RECORD (A (E B]  In this case, the old B, C, and D should go away
			as well as the old A. (By "going away" in this
			I mean MAPHASHing CLISPARRAY).


I believe this covers all the cases. I have, since writing the
first part of this, changed RECORD to work in the above manner
(except that in case (1) above, it still prints out (B redeclared)).
Unfortunately, I used yet another SYSPROP: CLISPRECORDFIELD as
opposed to CLISPRECORD to distinguish field names from record names;
however, you can remove RECORDFIELDEFAULT as it's no longer used.

To summarize: 
In RECORD(A (B C D)). If A was previously a record, i.e. (RECORD A (E F]
 then (1) E and F get deleted as record fields (i.e. their 
          CLISPRECORDFIELD prop get's deleted)
      (2) in the MAPHASH, all (CREATE A --)'s and (FETCH E --),
	 (REPLACE F --)'s get their translation removed.

If B previously was a record field, then in the MAPHASH, all
      (FETCH B --)'s and (REPLACE B --)'s get their translation removed.

If A was a record field, or B a record name, everything is OK; 
(fetch A --)'s will still work, as well as (create B --)'s.
Spelling lists are updated to remove the deleted items so that
no attempt will be made to respell to something invalid.


I just thought of a problem:
(RECORD A (B C]
(RECORD E (B D]
(RECORD A (F G]

this sequence will cause B to go away, since A has been changed; 
however, B is still valid in E; this will be fixed.

This is a disjointed message, but then SNDMSG isn't a very good editor.
			Larry
RECORD(DATA (WHEN . WHERE))
DWIMIFY((X:WHEN))
(FETCH WHEN OF X) WITH RIGHT TRANSLATION
DWIMIFY((FETCH WHEN OF X]
THIS WORKS, BUT I GET THE MESSAGE 
(POSSIBLE) PARENTHESIS ERROR IN ....

(2) CLISPIFY(((SETQ X A):FOO]
   (X←A :FOO)

   USE DWIMIFY
   (SETQ X (FETCH FOO OF A]


				LARRY
IT IS NEAT THE WAY THAT
(FOR X IN L BIND N WHEN N←(TST X) COLLECT <N ! X>) TURNS
INTO 
(MAPCONC L (F/L(X N)(AND (SETQ N (TST X)) (LIST (CONS N X]

HOWEVER, IT ISN'T NEAT THE WAY 
THE ABOVE MAPCONC CLISPIFIES INTO
(FOR X IN L COLLECT (LAMBDA (X N) <N ! X>) WHEN N←(TST X]
AS THIS DWIMIFIES TO:
(MAPCONC L (FUNCTION (LAMBDA(X)(AND (SETQ N (TST X)) (LIST (LAMBDA(X N)(CONS N X]

			LARRY
THIS WAS IN <TEITELMAN>LISPX; SO YES, MIGHT HAVE GONE AWAY.
THE "NIL" ERROR MESSAGE CAME ABOUT BECAUSE I USE CLISPERROR
AND YOU CHANGED CLISPERROR FOR ME , BUT THE CHANGE ISN'T IN
THE CURRENT LOADUP. I HOE OF
YOUR "WORK" SYSOUTS AND ALL WORKS FINE THERE.

2) THE CHANGE TO THE MEANING OF USING WAS IN THE FILE ON MY DIR,
BUT NOT ON NEWLISP. I HAVE JUST RECOMPILED AND PUT THE NEW FILE
ON <NEWLISP>. SPECIFICS OF THIS VERSION ARE, AS I OUTLINED TO
YOU:


(1) THERE ARE FOUR FLAVORS OF "USING":
    (CREATE (RECORD (A B NIL C)) USING X A←T]
      -> (LIST T (CADR X) (CADDR X) (CADDDR X]
 
    (CREATE (RECORD (A B NIL C)) REUSING X A←T]
      -> (CONS T (CDR X]

    (CREATE (RECORD (A B NIL C)) COPYING X A←T]
     -> (LIST T (COPY (CADR X)) (COPY (CADDDR X)) (COPY (CADDDR X]

    (CREATE (RECORD (A B NIL C)) COPYREUSING X A←T]
     -> (CONS T (COPY (CDR X]

ANY OF THESE MAY REMAIN UNDOCUMENTED IF YOU PREFER.

2) IT IS NOW POSSIBLE TO HAVE A RECORD NAME THE SAME AS A FIELD NAME,
WITHOUT CONFLICTS. I.E. THE NON-INTUITIVE RESTRICTION HAS BEEN REMOVED.



I ONCE AGAIN RESET SYSPROPS: THE TWO PROPERTIES I USE ARE
CLISPRECORD, AND CLISPRECORDFIELD.  


4) THE CLISPIFICATION (BUT NOT THE DWIMIFICATION) OF GLOBAL RECORDS
GOES THROUGH THE SETFN/ACCESSFN MECHANISM.  I REALIZED THAT I COULD
NOT GO THROUGH THE ACCESSFN MECHANISM FOR DWIMIFICATION BECAUSE THEN
(1) ACCESSFNS ARE CHECKED BEFORE LOCAL RECORD DECLARATIONS, MEANING
THAT A GLOBAL DECLARATION WOULD TAKE PRECIDENCE OVER A
LOCAL ONE.

				LARRY
I DON'T THINK YOU'LL LIKE THIS ONE, BUT I THOUGHT I'D PROPOSE IT
ANYWAY JUST SO I COULD FORGET ABOUT IT:
IN AN ITERATIVE STATEMENT, IF THE "ITERATION VARIABLE" IS A LIST,
TREAT IT AS A PATTERN (WITH VARDEFAULT = SETQ) AND BIND THE VARIABLES
WHICH ARE SET: I.E.
 (FOR (A . B) IN L ....)    (FOR ('A B --) IN L ...)
 (FOR (-- 'B -- C) IN L ...) . 
ESSENTIALLY (FOR PATTERN IN L ...) MEANS
(BIND <VARIABLES SET IN PATTERN> FOR TEM IN L WHEN TEM:PATTERN ...]

I CAN MAKE AN ENTRY INTO MATCH BLOCK WHICH WILL SET SOME VARIABLE
TO THE LIST OF VARS WHICH ARE SET WITHIN A PATTERN; YOU CAN THEN
USE THIS FOR THE PROG VARS....
WELL, IT'S AN IDEA.

			LARRY
WHEN A DWIM CORRECTION OR CLISP TRANSLATION IS MADE IN A FUNCTION,
THAT FUNCTION IS MARKED AS CHANGED, AND THUS THE FILE WHICH CONTAINS
IT IS MARKED AS "TO BE DUMPED". IS THERE SOME WAY OF TELLING
WHETHER OR NOT THE ONLY CHANGES WERE PUTHASHES? I.E. I HAVE DWIMIFIED
CODE WITH I.S.'S IN IT; WHEN I LOAD IT FROM A FILE, AND RUN IT, IT
COMES OUT AS NEEDING TO BE DUMPED; BUT THE ONLY THING THAT
WAS DONE TO IT WAS THE (PUTHASH ---). 
IN GENERAL, IF THE D TO BE DUMPED? AT LEAST
IN THIS CASE, THE ANSWER IS NO.  I REALIZE THAT THIS MIGHT BE DIFFICULT
TO IMPLEMENT (FOR EXAMPLE, I KNOW THERE IS NO GOOD WAY OF TELLING
WHETHER A "CREATE" INVOLVED A CORRECTION, AS IT ALWAYS ! DOES A
/RPLNODE AND SO YOU CAN'T JUST CHECK LISPXHIST FOR ANYTHING OTHER THAN
/PUTHASHES) BUT I THINK THAT IT IS WORTHWHILE THINKING ABOUT .

			LARRY